gpt4 book ai didi

swift - NSMutableAttributedString 无法正确呈现

转载 作者:行者123 更新时间:2023-11-28 13:30:06 26 4
gpt4 key购买 nike

我正在使用 SplitViewController; master 是带有一系列 RightDetail 单元格的 tableView,其属性字符串是通过值设置弹出窗口的回调设置的。

通过设置单元格 detailTextLabel 的方法传回并设置的值。它在 DispatchQueue.main.async 中执行此操作,因为对 detailTextLabel 的一些更新是通过来自 Network.Framework

的调用进行的

奇怪的是,当弹出窗口进行更改时,对属性字符串的更改未正确显示。在正确绘图发生之前,焦点必须更改到下一个表格单元格。

enter image description here

因此,只有当焦点更改为“流量”时,温度才会正确呈现,如下图所示。

enter image description here

我已逐步执行以下代码并检查是否将正确的值写入 self.buttonCell?.detailTextLabel?.attributedText

您还会看到我添加了 setNeedsLayout()setNeedsFocusUpdate()

func setDetailValueWithUnit( to index: Int) {
/** sets the detailtext to the value as the specified index and appends units.
it does this within the main dispatchQueue as this method is called by
operationResult which is called by the statemachine.
**/
DispatchQueue.main.async {
let font = self.buttonCell?.detailTextLabel?.font
let finalString = NSMutableAttributedString(string: valueString,attributes: [.font:font!])

if let units = self.units() {
finalString.append(units)
self.buttonCell?.detailTextLabel?.attributedText = finalString

//next 2 lines experimental in an attempt to fix the attributed text not
//being consistently redendered correctly
self.buttonCell?.detailTextLabel?.setNeedsLayout()
self.buttonCell?.detailTextLabel?.setNeedsFocusUpdate()
NSLog("setDetailValueWithUnit: %d", index)
return
} else {
assert(false, "No Units found")
}
}
}

最佳答案

问题是你所做的是完全错误的。你永远不应该直接触摸单元格的文本标签字体、文本或其他任何东西。这不是 TableView 的工作方式。您应该设置表的数据模型并从那里更新表,从而导致为可见单元格调用 cellForRowAt:。这样,只需要 cellForRowAt: 配置单元格,一切都会好起来的。

关于swift - NSMutableAttributedString 无法正确呈现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57537822/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com