tableview单元格中的翻转文本

时间:2017-02-27 06:10:46

标签: ios iphone swift uitableview uirefreshcontrol

当我刷新tableview时,我遇到了一个奇怪的问题。 (我正在使用UIRefreshControl。)如果我要缓慢发生的事情:

假设有3个单元格可见,A,B和C,按顺序从上到下。

1)我拉下来,桌面视图显示它很新鲜。

2)A获取应该进入的文本B. B获取应该进入的文本C. C在屏幕外。

3)刷新结束,桌子快速回到原位。

4)错误的文字会持续一秒左右。

5)每个单元格的文本翻转到正确的位置。

在视觉上看起来非常烦人。无论如何,我觉得这是一个可以用一行我不知道的代码修复的问题。

以下是我的代码的摘录:

刷新时调用的函数(从CloudKit获取记录):

func refreshTable(sender: UIRefreshControl) {

    var postsPredicate = NSPredicate(format: "%K = %@", VISIBILITY_CODE, WORLD) // default
    if sender.tag == 0 {
        postsPredicate = NSPredicate(format: "%K = %@", VISIBILITY_CODE, WORLD)
    }
    else if sender.tag == 1 {
        postsPredicate = NSPredicate(format: "%K = %@", VISIBILITY_CODE, PRIVATE)
    }
    else {
        // report problem
    }

    let query = CKQuery(recordType: POST, predicate: postsPredicate)
    let sort = NSSortDescriptor(key: "creationDate", ascending: false)
    query.sortDescriptors = [sort]
    self.db.perform(query, inZoneWith: nil) { records, error in
        if error == nil {
            self.list = [records!]
            DispatchQueue.main.async(execute: {
                self.postTableView.reloadData()
                self.refreshControl.endRefreshing()
            })
        }
        else {
            if let error = error as? CKError {
                print(error)
            }
        }

    }

}

这是我的cellForRowAtIndexPath功能:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    if self.list.count == 1 && self.list[0].count == 0 {
        let cell = tableView.dequeueReusableCell(withIdentifier: NO_POSTS, for: indexPath)
        return cell
    }

    let post = self.list[indexPath.section][indexPath.row]
    let cell = tableView.dequeueReusableCell(withIdentifier: POST_IN_FEED_CELL, for: indexPath)

    if let postCell = cell as? PostInFeedTableViewCell {

        // deleted the assignment of values to other UI elements in my custom cell

        let predicate = NSPredicate(format: "%K = %@", LIBRARY_CODE, post.object(forKey: LIBRARY_CODE) as! String)
        let query = CKQuery(recordType: LIBRARY_ITEM, predicate: predicate)
        self.db.perform(query, inZoneWith: nil) { records, error in
            if error == nil {
                let libraryItem = records?[0]
                DispatchQueue.main.async(execute: {

                    postCell.title.text = libraryItem?.object(forKey: NAME) as! String

                })
            }
            else {
                if let error = error as? CKError {
                    print(error)
                }
            }

        }


    }

    return cell
}

0 个答案:

没有答案