2016-01-04 2 views
20

Я хотел бы загрузить больше данных и создать дополнительные ячейки, когда пользователь прокручивается в нижней части таблицы. Я использую данные JSON и MySql.UITableView загружает больше при прокрутке вниз

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

ответ

-5

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

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

+0

я хочу для быстры –

+0

вы можете использовать Mix и Match, следуйте этой статье https://developer.apple.com/librar y/ios/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html –

+0

, или если вы используете cocoaPods, вы можете использовать напрямую, не смешивая и сопоставлять, просто импортируя инструкцию поверх своего файла viewcontroller.swift. –

1

Его назвали pagination таблицы. Pagination используется для эффективного отображения больших данных на столе. Here's вы можете получить хороший учебник для объектива-c и для быстрого просмотра этого Question.

И вы можете скачать пример в быстром диапазоне от Here.

+0

Я пытался, но не работал над своим кодом. Посмотрите, кто-нибудь может мне помочь изменить его. –

+0

Мне нужно шаг за шагом; ( –

1

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

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

} 

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

38

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

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

Мне очень нравится ваша идея, и она работает на меня. Но когда последний продукт моего запрос приходит и его официально последний, с вашим кодом он все еще пытается донести данные, а табличное представление мерцает. Любая идея о том, как остановить его, когда он принес последний элемент? –

+1

@ KwnstantinosNatsios очень просто. Просто нужно добавить еще один флаг, чтобы знать, что он может загрузить больше или нет, если он может загрузить больше => выполнить мою логику, если нет => игнорировать его. –

+0

Этот флаг может быть общим количеством элементов, но я подумал об этом позже: D –

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

Assalamaleikum дорогой. Почему этот код не работает в iPhone 5s: scrollView.contentOffset.y == scrollView.contentSize.height - scrollView.frame.size.height? – Zhanserik

10

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

быстрый не позволяет мне запустить приложение успешно из-за loadData loadMoreData показывает ошибку «использование неразрешенного идентификатора» –

+0

@Saeed Rahmatolahi проверяет, что идентификаторы ячеек правильно назначены и используются в UITableview –

+0

, можете ли вы изменить эти коды пожалуйста? У меня есть некоторые тексты в моих ячейках таблицы, которые они получат json –

Смежные вопросы