ios - 像 Instagram 或任何应用程序一样向下滚动时加载

标签 ios swift parse-server

我目前有一个 Xcode 项目,它加载数据并将它们放入数组中,这些数组将被排序并放置在表格中。截至目前,当我转到 viewDidLoad() 部分的表时,我有一个函数可以收集我需要的所有数据。但是为了阻止应用程序崩溃,它加载了 30 个限制。我当前的问题是,一旦用户滚动浏览 30 个项目,我希望在最初的 30 个项目(标准滚动)下再加载 30 个。我能想到的唯一方法是重新加载整个表,这不是很聪明。

我只想要一个标准的滚动功能,您可以在 Instagram、Facebook 或任何在 tableview 上加载数据的互联网应用程序中看到这种功能。所以当用户滚动时,更多的数据被添加到底部。下面我复制了我用来收集初始数据的代码:

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

我还添加了表格如何使用此信息的代码:

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

所以当这个 View Controller 在 viewDidLoad() 中出现时,我只需要在其中使用 findAnimalUsers() 来开始初始加载。 如何在向下滚动时加载更多内容???

最佳答案

可以使用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
    }
}

关于ios - 像 Instagram 或任何应用程序一样向下滚动时加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45602248/

相关文章:

node.js - 如何使用 npm 包 parse-server 启动带有 Express 的 Parse Server?

ios - 如何在 Swift 中同步检索 PFUser objectForKey

ios - 获取NSData而不是NSXMLParser

android - 图像未在移动浏览器中显示

ios - 使用正则表达式检索链接数组 - Swift

swift - 如何在后台继续动画和uitimer

ios - 未调用 URLSessionDelegate 函数

node.js - 解析服务器电话登录 - 该用户名的帐户已存在

ios - 通过 iPhone USB 端口连接的 Telnet iPhone 应用程序

ios - Alamofire 使用未声明的类型 'Serializer'