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)
}

Ответ 1

вы должны использовать этот метод

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
                }    
        }

Ответ 2

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()
    }
}

Ответ 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()
    }
}

Ответ 4

Вам нужен один очень удобный метод делегата:

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

}

Этот метод дает текущую отображаемую строку. Используйте indexPath, который он предоставляет, чтобы определить, когда вы приближаетесь к нижней части таблицы. Затем получите больше JSON и перезагрузите таблицу.

Ответ 5

Его назвали разбиение на страницы на таблицу. Пагинация используется для эффективного отображения больших данных на столе. Вот вы можете получить хороший учебник для цели-c и быстро взглянуть на этот вопрос.

И вы можете скачать пример в Быстро отсюда.

Ответ 6

Используйте эту библиотеку. https://github.com/samvermette/SVPullToRefresh

Это полностью заполнит ваши требования. Вам просто нужно менять номер страницы или временную метку каждый раз, когда будет вызываться новый веб-сервис.