如果可以将didSet
用于属性中的属性,我就会徘徊。
我们假设每次resize()
的{{1}}属性设置为新值时,我都会调用一个函数text
。我尝试使用标签自己的UILabel
,但它没有像我期望的那样工作。有没有办法做到这一点?
答案 0 :(得分:1)
它不起作用,正如我所期待的那样
你是什么意思? didSet
适用于重写的属性。试试这个:
class MyLabel : UILabel {
override var text : String? {
didSet {
resize()
}
}
private func resize() {
print("text is now \(text). resizing...")
frame = CGRectMake(...
}
}
答案 1 :(得分:0)
可以使用 KVO 跟踪属性修改。在您的视图之后,将初始化对目标标签的引用,您需要添加如下的添加观察者:
to acquire-one-server
let candidates servers with [ owner = nobody ]
if any? candidates
[ ask one-of candidates
[ set owner myself
move-to owner
set heading [heading] of owner
]
]
end
在你的视图中(你在上面调用的方法相同)你应该有这样的处理程序方法:
[self.label addObserver:self forKeyPath:@"text"
options:NSKeyValueObservingOptionNew context:nil];
当您离开视图时,请不要忘记取消订阅:
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object
change:(NSDictionary<NSString *,id> *)change
context:(void *)context {
// If you subscribed only for one value, you can resize from here or
// add conditions.
}
警告:[self.label removeObserver:self forKeyPath:@"text" context:nil];
和addObserver
应该保持平衡。如果您要拨打removeObserver
额外的时间,您的申请将会崩溃。