像 Instagram 或任何应用程序一样向下滚动时加载
Load while scrolling down like Instagram or any app
我目前有一个 Xcode 项目,它加载数据并将它们放入数组中,这些数组将被排序并放置在 table 上。截至目前,当我转到 viewDidLoad() 部分中的 table 时,我有一个函数可以收集我需要的所有数据。但是为了阻止应用程序崩溃,它加载了 30 个限制。我当前的问题是,一旦用户滚动浏览 30 个项目,我希望在最初的 30 个项目(标准滚动)下再加载 30 个。我能想到的唯一方法是重新加载整个 table 这不是很聪明。
我只想要一个标准的滚动功能,您可以在 Instagram、Facebook 或任何在 table 视图上加载数据的互联网应用程序中看到该功能。所以当用户滚动时,更多的数据被添加到底部。下面我复制了我用来收集初始数据的代码:
func findAnimalUsers() {
//STEP 1: Find users
let animalQuery = PFQuery(className: "Animals") //choosing class
animalQuery.whereKey("dog", equalTo: animalType.text!) //getting users with animal type user types
animalQuery.limit = 30 //number of users intitally showing
animalQuery.findObjectsInBackground (block: { (objects, error) -> Void in
if error == nil { //if no error
//clean up
self.animalArray.removeAll(keepingCapacity: false)
//STEP 2: Find related objects depending on query setting
for object in objects! {
self.animalArray.append(object.value(forKey: "user") as! String) //objectId of related users
}
//STEP 3: Find users
let query = PFUser.query()
query?.whereKey("objectId", containedIn: self.animalArray) //finding users
query?.addDescendingOrder("createdAt") //how to order users
query?.findObjectsInBackground(block: { (objects, error) -> Void in
if error == nil {
//clean up
self.usernameArray.removeAll(keepingCapacity: false)
self.profilePhotoArray.removeAll(keepingCapacity: false)
self.objectIDArray.removeAll(keepingCapacity: false)
//find related objects depending on query setting
for object in objects! {
self.usernameArray.append(object.object(forKey: "username") as! String)
self.profilePhotoArray.append(object.object(forKey: "profilePhoto") as! PFFile)
self.objectIDArray.append(object.objectId!)
}
} else {
print(error)
}
})
} else {
print(error)
}
})
}
我还添加了 table 如何使用此信息的代码:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
//define cell
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") as! AnimalsCell
//STEP 1: connect data from server to objects
cell.usernameLabel.text = usernameArray[indexPath.row]
cell.objectID = objectIDArray[indexPath.row]
profilePhotoArray[indexPath.row].getDataInBackground (block: { (data, error) in
if error == nil {
cell.profilePhoto.image = UIImage(data: data!)
} else {
print(error)
}
})
所以当这个视图控制器在 viewDidLoad() 中出现时,我只需要在其中使用 findAnimalUsers() 来开始初始加载。 如何在向下滚动时加载更多内容???
您可以使用 tableView
的委托方法轻松做到这一点
func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell , forRowAtIndexPath indexPath: NSIndexPath) {
if indexPath.row == lastElement {
// handle your logic here to get more items, add it to dataSource and reload tableview
}
}
可以使用scrollview的delegate方法
func scrollViewDidScroll(_ scrollView: UIScrollView)
{
let offsetY = scrollView.contentOffset.y
let contentHeight = scrollView.contentSize.height
let scrollHeight = scrollView.frame.size.height
if offsetY >= contentHeight - scrollHeight
{
//your logic
}
}
我目前有一个 Xcode 项目,它加载数据并将它们放入数组中,这些数组将被排序并放置在 table 上。截至目前,当我转到 viewDidLoad() 部分中的 table 时,我有一个函数可以收集我需要的所有数据。但是为了阻止应用程序崩溃,它加载了 30 个限制。我当前的问题是,一旦用户滚动浏览 30 个项目,我希望在最初的 30 个项目(标准滚动)下再加载 30 个。我能想到的唯一方法是重新加载整个 table 这不是很聪明。
我只想要一个标准的滚动功能,您可以在 Instagram、Facebook 或任何在 table 视图上加载数据的互联网应用程序中看到该功能。所以当用户滚动时,更多的数据被添加到底部。下面我复制了我用来收集初始数据的代码:
func findAnimalUsers() {
//STEP 1: Find users
let animalQuery = PFQuery(className: "Animals") //choosing class
animalQuery.whereKey("dog", equalTo: animalType.text!) //getting users with animal type user types
animalQuery.limit = 30 //number of users intitally showing
animalQuery.findObjectsInBackground (block: { (objects, error) -> Void in
if error == nil { //if no error
//clean up
self.animalArray.removeAll(keepingCapacity: false)
//STEP 2: Find related objects depending on query setting
for object in objects! {
self.animalArray.append(object.value(forKey: "user") as! String) //objectId of related users
}
//STEP 3: Find users
let query = PFUser.query()
query?.whereKey("objectId", containedIn: self.animalArray) //finding users
query?.addDescendingOrder("createdAt") //how to order users
query?.findObjectsInBackground(block: { (objects, error) -> Void in
if error == nil {
//clean up
self.usernameArray.removeAll(keepingCapacity: false)
self.profilePhotoArray.removeAll(keepingCapacity: false)
self.objectIDArray.removeAll(keepingCapacity: false)
//find related objects depending on query setting
for object in objects! {
self.usernameArray.append(object.object(forKey: "username") as! String)
self.profilePhotoArray.append(object.object(forKey: "profilePhoto") as! PFFile)
self.objectIDArray.append(object.objectId!)
}
} else {
print(error)
}
})
} else {
print(error)
}
})
}
我还添加了 table 如何使用此信息的代码:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
//define cell
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") as! AnimalsCell
//STEP 1: connect data from server to objects
cell.usernameLabel.text = usernameArray[indexPath.row]
cell.objectID = objectIDArray[indexPath.row]
profilePhotoArray[indexPath.row].getDataInBackground (block: { (data, error) in
if error == nil {
cell.profilePhoto.image = UIImage(data: data!)
} else {
print(error)
}
})
所以当这个视图控制器在 viewDidLoad() 中出现时,我只需要在其中使用 findAnimalUsers() 来开始初始加载。 如何在向下滚动时加载更多内容???
您可以使用 tableView
func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell , forRowAtIndexPath indexPath: NSIndexPath) {
if indexPath.row == lastElement {
// handle your logic here to get more items, add it to dataSource and reload tableview
}
}
可以使用scrollview的delegate方法
func scrollViewDidScroll(_ scrollView: UIScrollView)
{
let offsetY = scrollView.contentOffset.y
let contentHeight = scrollView.contentSize.height
let scrollHeight = scrollView.frame.size.height
if offsetY >= contentHeight - scrollHeight
{
//your logic
}
}