我正在开发类似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
+ 一起使用时,应该在单元格的文件中完成
答案 0 :(得分:1)
IMO,您不想在for cellForRowAt调用中执行此操作,主要是因为您想使该调用快速返回,并且还因为您仅返回格式化的单元格。
我会争辩/建议您在初始化行时为该行设置处理程序,这样该处理程序值仅设置一次。
请记住,在用户滚动浏览和进入单元格时,会多次调用cellForRowAt。
查看https://developer.apple.com/documentation/uikit/uitableviewdatasource/1614861-tableview,以获取有关如何重用单元格的更多信息。