滚动到底部时,UITableView加载更多

时间:2016-01-04 10:15:42

标签: swift xcode uitableview

当用户滚动到表格底部时,我想加载更多数据并创建其他单元格。我正在使用JSON数据和MySql。

func dataJsonFromURL(url:String)->NSArray
{
    if let data = NSData(contentsOfURL: NSURL(string: url)!) {
        return ((try! NSJSONSerialization.JSONObjectWithData(data, options: [])) as! NSArray)
    }
    else{
        return data
    }
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
{
    let cell = tableView.dequeueReusableCellWithIdentifier("NCell", forIndexPath: indexPath) as! TableViewCell22

    cell.backgroundColor = UIColor .clearColor()

    let mindata = (data[indexPath.row] as! NSDictionary)
}

6 个答案:

答案 0 :(得分:51)

你必须使用这种方法

override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
            let lastElement = dataSource.count - 1
            if indexPath.row == lastElement {
                // handle your logic here to get more items, add it to dataSource and reload tableview
                }    
        }

答案 1 :(得分:14)

Xcode 8,Swift 3

func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
    let lastElement = dataSource.count - 1
    if !loadingData && indexPath.row == lastElement {
        indicator.startAnimating()
        loadingData = true
        loadMoreData()
    }
}

答案 2 :(得分:3)

我使用这种方法,它适用于我

 func scrollViewDidScroll(scrollView: UIScrollView) {
    let offsetY = scrollView.contentOffset.y
    let contentHeight = scrollView.contentSize.height

    if offsetY > contentHeight - scrollView.frame.size.height {


        loadMoreDataFromServer()
        self.tableView.reloadData()
    }
}

答案 3 :(得分:1)

您需要一个非常方便的委托方法:

func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell , forRowAtIndexPath indexPath: NSIndexPath) {

}

此方法为您显示当前显示的行。使用它提供的indexPath来确定何时接近表的底部。然后获取更多JSON并重新加载表。

答案 4 :(得分:0)

它被称为tableview的分页。 分页用于以有效的方式在表格上显示大数据。 Here's你可以为objective-c获得很好的教程 并快速查看这个Question

您可以从Here下载swift中的示例。

答案 5 :(得分:-8)

使用此库。 https://github.com/samvermette/SVPullToRefresh

这将满足您的要求。 您只需要在每次调用新的Web服务时更改页码或时间戳。