使用UITableView加载更多选项 [英] Load more options with UITableView

查看:94
本文介绍了使用UITableView加载更多选项的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

尝试使用分页将数据加载到页面中时,我已经看到了很多示例,但是所有示例都在Objective-C中,并且一些问题尚未得到解答.

Trying to load my data in page using pagination, I've already seen many examples but all are in Objective-C and some questions are unanswered.

我的代码:

class testTableViewController: UITableViewController {

    //MARK: - Properties -

    var allObjectArray: NSMutableArray = []
    var elements: NSMutableArray = []

    var currentPage = 0 //number of current page
    var nextpage = 0

    var selectedRow = Int()

    //MARK: - View Life Cycle -

    override func viewDidLoad() {
        super.viewDidLoad()

        for var i = 1; i < 500; i++ {
            allObjectArray.addObject(i)
        }
        elements.addObjectsFromArray(allObjectArray.subarrayWithRange(NSMakeRange(0, 30)))
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
    // MARK: - Table view data source -

    override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 1
    }
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return elements.count + 1
    }
    override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        selectedRow = (tableView.indexPathForSelectedRow?.row)!
    }
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

        var customCell = tableView.dequeueReusableCellWithIdentifier("cell")
        customCell = UITableViewCell(style: .Default, reuseIdentifier: "cell")

        customCell!.textLabel!.text = "cell - \(allObjectArray[indexPath.row])"

        if indexPath.row == elements.count  {
            customCell?.textLabel?.textColor = UIColor.blueColor()
            customCell?.textLabel?.text = "Load more..."
        }
        return customCell!
    }
    override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
        nextpage = elements.count

        if indexPath.row == nextpage {
            if indexPath.row == selectedRow {
                currentPage++
                nextpage = elements.count - 5
                elements.addObjectsFromArray(allObjectArray.subarrayWithRange(NSMakeRange(currentPage, 30)))
                tableView.reloadData()
            }
        }
    }
}

我想要这种输出:

试图获取选定的索引,但它将返回nil.

Tried to fetch selected index but it will return nil.

推荐答案

在Interface Builder中创建用于表格视图的Outlet,并创建两个动态原型单元格,使它们具有标识符,从而使一个单元格带有一个按钮(您的加载更多单元格按钮) 然后使用该按钮创建动作,该动作将包含加载更多单元的逻辑!!!

Create Outlets in Interface Builder for tableview and make two dynamic prototype cells give them identifiers make one cell with a button(your load more cell button) Then create action with that button that will contain the logic to load more cells!!!

现在请参阅下面的摘录以供参考...

now see the snipet below for reference...

class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource {

@IBOutlet weak var tblDemo: UITableView!
var arForCells:NSMutableArray = NSMutableArray()
let simpleCellID = "SimpleCell"
let loadMoreCell = "LoadMoreCell"

override func viewDidLoad() {
    super.viewDidLoad()
    tblDemo.delegate = self
    tblDemo.dataSource = self
    arForCells  = NSMutableArray(objects: "1", "2", "3", "4", "5", "6", "7", "8", "9", "10")
}

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return arForCells.count + 1
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    if (indexPath.row == arForCells.count){
        let cell:UITableViewCell = tableView.dequeueReusableCellWithIdentifier(loadMoreCell, forIndexPath: indexPath)
        return cell
    }else {
        let cell:UITableViewCell = tableView.dequeueReusableCellWithIdentifier(simpleCellID, forIndexPath: indexPath)

        let lblCounter = cell.viewWithTag(111) as! UILabel
        lblCounter.text = arForCells.objectAtIndex(indexPath.row) as! String
        return cell
    }
}

@IBAction func loadMoreCells(sender: AnyObject) {
    let newAr:NSArray = NSArray(objects:  "1", "2", "3", "4", "5", "6", "7", "8", "9", "10")

    arForCells.addObjectsFromArray(newAr as [AnyObject])
    tblDemo.reloadData()
}}

我已经检查过,它应该会为您提供所需的结果.

as I have checked, It should give you the desired results.

您也可以在TableViewFooter中执行相同的操作.

You could also do the same in TableViewFooter.

这篇关于使用UITableView加载更多选项的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆