当用户滚动到表格底部时,我想加载更多数据并创建其他单元格。我正在使用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)
}
答案 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服务时更改页码或时间戳。