swift - uitableviewcontroller - UITableView carga más cuando se desplaza hacia abajo
uitableview swift programmatically (6)
Me gustaría cargar más datos y crear celdas adicionales cuando el usuario se desplace a la parte inferior de la tabla. Estoy usando datos JSON y 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)
}
Necesitas un método de delegado muy útil:
func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell , forRowAtIndexPath indexPath: NSIndexPath) {
}
Este método le da la fila actual mostrada. Use la indexPath que proporciona para determinar cuándo se está acercando al final de la tabla. Luego consigue más JSON y vuelve a cargar la tabla.
Usé este método y me funciona.
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()
}
}
Usa esta biblioteca. https://github.com/samvermette/SVPullToRefresh
Esto llenará por completo sus requisitos. Solo necesita cambiar el número de página o la marca de tiempo cada vez que se llame al nuevo servicio web.
tienes que usar este metodo
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
}
}
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()
}
}