来自 UITableView 的 Swift Presenting popover 运行速度非常慢

Posted

技术标签:

【中文标题】来自 UITableView 的 Swift Presenting popover 运行速度非常慢【英文标题】:Swift Presenting popover from UITableView runs very slow 【发布时间】:2016-04-23 02:44:34 【问题描述】:

我不确定为什么它运行缓慢。有时我可以点击该行,它会立即打开弹出窗口。有时我可以点击该行,加载需要 2-3 秒。几乎似乎代码在获取单元时感到困惑。

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) 
    let selectedItem = self.filteredTransactions[indexPath.row]
    if let cell = tableView.cellForRowAtIndexPath(indexPath) as? BudgetHomeCell 
        if let addTXView = self.storyboard?.instantiateViewControllerWithIdentifier("BHAddTXVC") as? BHAddTXVC 
            addTXView.modalPresentationStyle = .Popover
            addTXView.preferredContentSize = CGSizeMake(200, 200)
            let popover = addTXView.popoverPresentationController
            popover?.permittedArrowDirections = .Any
            popover?.delegate = self
            popover?.sourceView = cell.valueLabel
            popover?.sourceRect = cell.valueLabel.bounds
            addTXView.selectedTX = selectedItem
            self.presentViewController(addTXView, animated: true, completion: nil)
        
    

在从表格视图单元格中的值标签显示弹出框时,有什么更好的性能建议吗?在点击时,我检查了调试导航器,没有 CPU 或内存峰值。模拟 iPad 和 iPad Air 2 都会发生这种情况。我确实有一个滑动手势运行,它把它扔掉了。我删除了它,在某些情况下它仍然非常缓慢地显示弹出窗口。

【问题讨论】:

这是一个疯狂而疯狂的猜测:将didSelectRowAtIndexPath 的整个内部包裹在一个delay 块中(对于我的delay 函数,请参阅***.com/a/24318861/341994)。它可以是 00.1delay。看看这是否有什么不同。如果它没有帮助,好吧,我们失败了,把它重新拿出来。 正如@matt 建议的那样,您可以尝试显式地使代码在主线程上运行。 应该已经意识到了,我想我真的想知道代码是否有什么东西导致它处理缓慢,我做错了。使用马特的建议是有效的。 【参考方案1】:

我真的不知道为什么。 但这通过将DispatchQueue.main.async 放入didSelectRowAtItemAt 解决了我的问题。

【讨论】:

【参考方案2】:

有人在另一个帖子中回答了这个问题。在这里查看:https://***.com/a/27227446/4740794

诀窍是在选择行后手动取消选择该行。它对我很有用。如果需要,请确保在取消选择之前使用或存储选定的行。

【讨论】:

以上是关于来自 UITableView 的 Swift Presenting popover 运行速度非常慢的主要内容,如果未能解决你的问题,请参考以下文章

来自 JSON 数据的 UITableView 部分 swift

来自 UITableView 的 Swift Presenting popover 运行速度非常慢

在 Swift 2 和 Xcode 7 中使用来自 youtube 视频的 JSON 数据填充 UITableView

将数据保存在来自 ios swift 中 2 个不同 uitableviews 的数组中

Swift 用新数据更新 UITableView

Swift:将包含自定义标签的单元格添加到 UITableView