簡體   English   中英

使用UITableView和數組進行無限滾動

[英]Infinite scroll with UITableView and an Array

我是Swift的新手,我想用數組進行無限滾動。 這是我的ClassViewController類

class TableViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
  var legumes: [String] = ["Eggs", "Milk", "Chocolat", "Web", "Miel", "Pop", "Eco", "Moutarde", "Mayo", "Thea", "Pomelade", "Gear", "Etc" , "Nop", "Dews", "Tout", "Fun", "Xen" , "Yoga" ]
  override func viewDidLoad() {
    super.viewDidLoad()
    self.tableView.delegate = self
    self.tableView.dataSource = self
    func numberOfSections(in tableView: UITableView) -> Int {
      return 1
    }
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
       return self.legumes.count
    }
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
      let cell = self.tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! ImageTableViewCell
      return cell
    }
}

我想顯示我的數組的前十項,當我在TableViewController的底部時,它將加載接下來的十個項目,等等。我不知道怎么做,我在GitHub上看到很多代碼但是我不知道如何實現它們。

非常感謝。

您所描述的內容稱為pagination 你應該做這樣的事情:

/* Number of page you're loading contents from */
var pageIndex: Int = 1

override func scrollViewDidScroll(scrollView: UIScrollView) {
    let offsetY = scrollView.contentOffset.y
    let contentHeight = scrollView.contentSize.height

    if offsetY > contentHeight - scrollView.frame.size.height {
        /* increment page index to load new data set from */
        pageIndex += 1

        /* call API to load data from next page or just add dummy data to your datasource */
        /* Needs to be implemented */
        loadNewItemsFrom(pageIndex)

        /* reload tableview with new data */
        tableView.reloadData()
    }
}

考慮使用PagingTableView

class MainViewController: UIViewController {

  @IBOutlet weak var contentTable: PagingTableView!
  var legumes: [String] = ["Eggs", "Milk", "Chocolat", "Web", "Miel", "Pop", "Eco", "Moutarde", "Mayo", "Thea", "Pomelade", "Gear", "Etc" , "Nop", "Dews", "Tout", "Fun", "Xen" , "Yoga" ]

  override func viewDidLoad() {
    super.viewDidLoad()
    contentTable.dataSource = self
    contentTable.pagingDelegate = self
  }

}

extension MainViewController: UITableViewDataSource {

  func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return legumes.count
  }

  func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! ImageTableViewCell
    guard legumes.indices.contains(indexPath.row) else { return cell }
    cell.content = legumes[indexPath.row]
    return cell
  }

}

extension MainViewController: PagingTableViewDelegate {

  func paginate(_ tableView: PagingTableView, to page: Int) {
    contentTable.isLoading = true
    DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
      self.legumes.append(contentsOf: legumes)
      self.contentTable.isLoading = false
    }
  }

}

修改paginate函數以按您的意願工作

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM