当tableView处于底部滞后时检测

时间:2015-04-17 10:31:14

标签: ios uitableview swift

我创建了一个连接到api的tableView。我正在尝试实现一个加载更多的功能,当你到达tableView的底部时,它会进行一个新的api调用。我已经创建了这个功能,但是当api / json文件中没有对象时。当我到达底部时,它似乎是非常迟钝的,为什么会这样?

检测我何时在屏幕底部并进行api通话

func scrollViewDidScroll(scrollView: UIScrollView!) {



    var height = scrollView.frame.size.height;
    var contentYoffset = scrollView.contentOffset.y;
    var distanceFromBottom = scrollView.contentSize.height - contentYoffset;

    if distanceFromBottom < height
    {
        if isApiCalling == false {
            getRecent("URL/recent.php?lastid=\(lastObjectIndex)&limit=\(numberOfRecordsPerAPICall)")
            self.tableVIew.reloadData()
        }
    }
}

GetRecent函数。我甚至创建了一个isAPICalling变量,它确保它不会多次运行api。

func getRecent(url: NSString) {

    isApiCalling = true
    let recentUrl = NSURL(string: url as String)
    var recentRequest = NSURLRequest(URL: recentUrl!)
    var recentData = NSURLConnection.sendSynchronousRequest(recentRequest, returningResponse: nil, error: nil)

    let jsonArray = JSON(data: recentData!)
    for (key: String, subJson: JSON) in jsonArray {
        // Create an object and parse your JSON one by one to append it to your array
        var newNewsObject = News(id: subJson["id"].intValue, title: subJson["title"].stringValue, link: subJson["url"].stringValue, imageLink: subJson["image_url"].stringValue, summary: subJson["news_text"].stringValue, date: getDate(subJson["date"].stringValue))



        recentArray.append(newNewsObject)
    }

    lastObjectIndex = lastObjectIndex + numberOfRecordsPerAPICall
    isApiCalling = false


}

1 个答案:

答案 0 :(得分:1)

你可以在tableview部分添加页脚,如果页脚加载然后通过API调用调用下一组,(仅当flag == - 1时加载页脚

在下一次设置请求时,您可以设置标记(如flag = 1),该调用已经进行,因此如果用户再次向上和向下滚动,则不会发送请求(如果{{1} } == 1)。

作为响应,将标志设置恢复正​​常(如flag = 0),并检查响应,如果没有更多数据,则设置标志以便不加载页脚(如flag = - 1 )。

P.S。在第一次加载视图时,请确保flag为0。

可以用这种方式解决你的问题。

HTH,享受编码!!