swift - 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
+和委托时
解决方案
IMO 您不想在 for cellForRowAt 调用中执行此操作,主要是因为您想让该调用快速返回,并且还因为您只返回格式化的单元格。
我会争辩/建议您在初始化行时为行设置处理程序,这样处理程序值只设置一次。
请记住,当用户滚动浏览和看到单元格时,会多次调用 cellForRowAt。
查看https://developer.apple.com/documentation/uikit/uitableviewdatasource/1614861-tableview以获取有关如何重用单元格的更多信息。
推荐阅读
- ruby - 为什么我的应用程序并不总是向频道发送消息?
- python - 我如何修复错误类型 object() 不带参数
- pandas - pd.series 会对字典键进行排序吗?
- java - 在单链表中更新尾节点的 nextRef 时如何更新头节点的 nextRef
- powershell - 如何处理在 Powershell 中转义获取凭据请求?
- javascript - 菜单中的粘性 DIV
- game-engine - 使用实体组件系统如何确保一组组件类型中最多存在一个组件(每个实体)?
- bash - 用于连接 DB2 数据库的 Shell 脚本不起作用
- c# - 用于解析 html、获取 img 标签计数并在 C# 中回发表单数据的控制台应用程序
- python - 只是组合层集成模型吗?