TableView单元内的事件性能更好

时间:2018-09-12 18:28:13

标签: swift xcode performance cell

我正在开发类似Facebook的应用程序,如果帖子过长,它将被删减,并在其末尾出现“查看更多”消息,其中包含一些点击事件。 (我使用FRHyperLabel

一切正常,但我有一个问题:如果tableView: cellForRowAt indexPath:内的formatting + event被清除了,对性能是否不利?

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

    }

或者当它与委托awakeFromNib + 一起使用时,应该在单元格的文件中完成

1 个答案:

答案 0 :(得分:1)

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

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

请记住,在用户滚动浏览和进入单元格时,会多次调用cellForRowAt。

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