【问题标题】:Better performance events inside TableView cellTableView 单元格内更好的性能事件
【发布时间】:2018-09-12 18:28:13
【问题描述】:

我正在开发一个类似 Facebook 的应用程序,如果帖子太长,它会被删减,最后会出现“查看更多”,其中包含一些点击事件。 (我使用FRHyperLabel)

一切正常,但我有一个问题:如果格式化+事件在 tableView: cellForRowAt indexPath: 中被清除,对性能有影响吗?

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

            var message : message
            var cell : MessageCell

            let message = self.messages[indexPath.row]

            // World Message

            cell = tableView.dequeueReusableCell(withIdentifier: "essageCell", for: indexPath) as! MessageCell

            cell.messageLabel.attributedText = message.limitMessageMax250char()

            //Add link if needed
            if message.count > appSettings.maxCharacters.message {

                let handler = {
                    (hyperLabel: FRHyperLabel!, range: NSRange!) -> Void in

                    self.alert(title: "Test", message: "Alert: because clicked on link")
                }

                let text = cell.messageLabel.text!
                let nsRange = text.calculateUnicodeScalar(start: text.unicodeScalars.count-8, len: 8) // See more is 8 characters

                cell.messageLabel.setLinkFor(nsRange, withLinkHandler: handler)
            }

            return cell

    }

或者我应该在 Cell 的文件中执行它,当它是 awakeFromNib + 与委托

【问题讨论】:

    标签: swift xcode performance cell


    【解决方案1】:

    IMO 您不想在 for cellForRowAt 调用中执行此操作,主要是因为您想让该调用快速返回,并且还因为您只返回格式化的单元格。

    我会争辩/建议您在行初始化时为行设置处理程序,这样处理程序值只设置一次。

    请记住,当用户滚动浏览和看到单元格时,会多次调用 cellForRowAt。

    查看https://developer.apple.com/documentation/uikit/uitableviewdatasource/1614861-tableview 以获取有关如何重复使用单元格的更多信息。

    【讨论】:

    • 如果我设法在单元格的初始化中做到这一点,并且当用户滚动时单元格正在被重用(虽然每个单元格都有不同的“链接”部分),它是否显示正确的部分突出显示和可点击单词?
    • 您将设置单元格的属性,因为它被加载以使用 cellForRowAt 显示,只要您设置该属性。
    猜你喜欢
    • 2018-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多