Je souhaite charger plus de données et créer des cellules supplémentaires lorsque l'utilisateur fait défiler l'écran jusqu'en bas. J'utilise les données JSON et 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)
}
vous devez utiliser cette méthode
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
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()
}
}
j'ai utilisé cette méthode et ça marche pour moi
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()
}
}
Vous avez besoin d'une méthode de délégué très pratique:
func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell , forRowAtIndexPath indexPath: NSIndexPath) {
}
Cette méthode vous donne la ligne actuellement affichée. Utilisez la propriété indexPath fournie pour déterminer le moment où vous approchez du bas de la table. Puis obtenez plus de JSON et rechargez la table.