首页 > 解决方案 > TableView 单元格内更好的性能事件

问题描述

我正在开发一个类似 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 +和委托时

标签: swiftxcodeperformancecell

解决方案


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

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

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

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


推荐阅读