当用户滚动到lastViewViewCell

时间:2015-07-21 05:35:56

标签: ios swift uitableview parse-platform infinite-scroll

上下文

  • 构建一种新闻源

问题

  • 当用户滚动到最后一个表格视图单元格
  • 时,我需要加载更多帖子
  • 我不知道从哪里开始,如何实现,代码在哪里
  • 所以基本上我需要在用户滚动到最后一个表格视图时调用服务器下载帖子,将这些帖子追加到当前表格视图的底部

以下是相关代码(我认为!)

class GeneralPostAreaController: UIViewController {
        ...
        extension GeneralPostAreaController: UITableViewDataSource {

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

        return PostsCollection.postsFromParse.posts.count

    }

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier("PostCell") as! PostTableViewCell
        cell.postImage.image = PostsCollection.postsFromParse.posts[indexPath.row].image
        cell.postName.text = PostsCollection.postsFromParse.posts[indexPath.row].name
        cell.postText.text = PostsCollection.postsFromParse.posts[indexPath.row].text

        cell.loadAudio = PostsCollection.postsFromParse.posts[indexPath.row].audioObject.parseAudioData
        return cell
    }

}

这是我用来从服务器(Parse)获取数据的代码。请原谅可怕的数据结构,这是我的第一个应用程序!

    class ParseQueryer: NSObject{

//HAVE TO RESTRUCTURE

var posts: [Post] = []

//this is not a very elegant way to reload table Data
func getPosts(selectedTableView: UITableView){

var query = PFQuery(className: "Post")
query.addDescendingOrder("createdAt")
query.limit = 10
query.findObjectsInBackgroundWithBlock {(result: [AnyObject]?, error: NSError?) -> Void in
    self.posts = result as? [Post] ?? []

    selectedTableView.reloadData()

    for post in self.posts{
        post.name = post["Name"] as? String
        post.text = post["Text"] as? String
        //println(post.text)
        if let audioData = post["Audio"] as? PFFile {
            audioData.getDataInBackgroundWithBlock({
                (audioData: NSData?, error: NSError?) -> Void in
                if (error == nil){
                    post.audioObject.parseAudioData = audioData
                }
            })
        }
        if let imgData = post["Photo"] as? PFFile {
            imgData.getDataInBackgroundWithBlock({
                (imageData: NSData?, error: NSError?) -> Void in
                if (error == nil){
                    let image = UIImage(data: imageData!)
                    post.image = image
                }
            })
        }

    }
}
    selectedTableView.reloadData()

我看了答案here,但这对我没有意义。

3 个答案:

答案 0 :(得分:1)

所以static_assert继承自UITableView,因此您可以使用scrollview委托方法知道何时滚动到底部。

UIScrollView

答案 1 :(得分:0)

您可以通过此方法加载更多操作,因为表视图委托是滚动视图委托:

$(div).appendTo('body');
$("body div").find('.ps_desc').html('<h1></h1>');

答案 2 :(得分:0)

最好的方法是测试屏幕底部的一个点,并在用户滚动时使用此方法调用(zip):

scrollViewDidScroll

测试屏幕底部附近的一个点,然后使用indexPath返回检查indexPath是否是最后一行,如果是,则添加行。