UIScrollView:无限滚动以显示斐波那契数
UIScrollView: infinite scroll to display fibonacci numbers
我试图让用户无限滚动屏幕以获得更多斐波那契数列。我最多只能显示 fib 数,即我的 posts
数组的长度。这是它现在的样子。 我无法实现 scrollViewDidScroll
功能来实现无限滚动。我在 Whosebug 上找到了一些对我有意义的代码,但我不知道如何将它连接到 tableview(你需要更多数据的部分)。感谢任何输入!
import UIKit
class FeedTableViewController: UITableViewController {
let posts : [String] = ["","","","","","","",""]
var fibArray: [Int] = [0,1]
let cellIdentifier = "userPostFeedCell"
var indexOfPageToRequest = 1
override func scrollViewDidScroll(_ scrollView: UIScrollView) {
let offsetY = scrollView.contentOffset.y
let contentHeight = scrollView.contentSize.height
if offsetY > contentHeight - scrollView.frame.size.height {
// increments the number of the page to request
indexOfPageToRequest += 1
// call your API for more data
// tell the table view to reload with the new data
self.tableView.reloadData()
}
}
func fibonacci(n: Int) -> Int {
if (fibArray.count > n) {
return fibArray[n];
}
let fibonacciNumber = fibonacci(n: n - 1) + fibonacci(n: n - 2)
fibArray.append(fibonacciNumber)
return fibonacciNumber
}
override func viewDidLoad() {
super.viewDidLoad()
self.tableView.register(
UINib(nibName: "FeedTableViewCell", bundle: nil), forCellReuseIdentifier: cellIdentifier)
}
override func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return posts.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> FeedTableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath)
cell.textLabel?.text = "\(fibonacci(n: indexPath.row+1))"
print("cellForRowAt \(indexPath.row)")
return cell as! FeedTableViewCell
}
override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
print("heightForRowAt \(indexPath.row)")
return 40
}
}
您将在斐波那契数列中很快溢出 Int,因此您实际上不需要无限滚动。您只需将您的部分中的行数设置为高。该应用程序只创建需要显示的单元格,因此您不会使用大量内存。这是我的代码
override func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 20000
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath)
cell.textLabel?.text = "\(fibonacci(n: indexPath.row+1))"
return cell
}
我试图让用户无限滚动屏幕以获得更多斐波那契数列。我最多只能显示 fib 数,即我的 posts
数组的长度。这是它现在的样子。 scrollViewDidScroll
功能来实现无限滚动。我在 Whosebug 上找到了一些对我有意义的代码,但我不知道如何将它连接到 tableview(你需要更多数据的部分)。感谢任何输入!
import UIKit
class FeedTableViewController: UITableViewController {
let posts : [String] = ["","","","","","","",""]
var fibArray: [Int] = [0,1]
let cellIdentifier = "userPostFeedCell"
var indexOfPageToRequest = 1
override func scrollViewDidScroll(_ scrollView: UIScrollView) {
let offsetY = scrollView.contentOffset.y
let contentHeight = scrollView.contentSize.height
if offsetY > contentHeight - scrollView.frame.size.height {
// increments the number of the page to request
indexOfPageToRequest += 1
// call your API for more data
// tell the table view to reload with the new data
self.tableView.reloadData()
}
}
func fibonacci(n: Int) -> Int {
if (fibArray.count > n) {
return fibArray[n];
}
let fibonacciNumber = fibonacci(n: n - 1) + fibonacci(n: n - 2)
fibArray.append(fibonacciNumber)
return fibonacciNumber
}
override func viewDidLoad() {
super.viewDidLoad()
self.tableView.register(
UINib(nibName: "FeedTableViewCell", bundle: nil), forCellReuseIdentifier: cellIdentifier)
}
override func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return posts.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> FeedTableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath)
cell.textLabel?.text = "\(fibonacci(n: indexPath.row+1))"
print("cellForRowAt \(indexPath.row)")
return cell as! FeedTableViewCell
}
override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
print("heightForRowAt \(indexPath.row)")
return 40
}
}
您将在斐波那契数列中很快溢出 Int,因此您实际上不需要无限滚动。您只需将您的部分中的行数设置为高。该应用程序只创建需要显示的单元格,因此您不会使用大量内存。这是我的代码
override func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 20000
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath)
cell.textLabel?.text = "\(fibonacci(n: indexPath.row+1))"
return cell
}