我在更新UILabel
上的文字时遇到问题。我的ViewController
更改了其视图属性phoneNumberString
。我的观点观察了这个属性的变化并作出反应,改变了标签的属性文本。它观察使用ReactiveCocoa。
[[RACAble(self.phoneNumberString) distinctUntilChanged]subscribeNext:^(id x) {
NSString* s=(NSString*)x;
UIFont* font=[UIFont systemFontOfSize:numbersFontSize weight:UIFontWeightThin];
NSMutableDictionary* attributesDict=[NSMutableDictionary dictionaryWithObjectsAndKeys:font,NSFontAttributeName, nil];
self.phoneNumberLabel.attributedText = [[NSAttributedString alloc]initWithString:s attributes:attributesDict];
[self.phoneNumberLabel setNeedsDisplay];
NSLog(@"label att text = %@\nlabel text = %@\ninput string = %@\n==",self.phoneNumberLabel.attributedText,self.phoneNumberLabel.text,x);
}];
它提供以下日志:
label att text = +7 (225{
NSFont = "<UICTFont: 0x7a2942c0> font-family: \".SFUIDisplay-Thin\"; font-weight: normal; font-style: normal; font-size: 25.00pt";
}
label text = +7 (225
input string = +7 (225
我需要将归档文字放在我的UILabel
中。问题是它在模拟器中没有提供任何变化。 (使用原生[self observeValueForKeyPath...]
会产生相同的效果)。
我使用相同代码的通知解决了这个问题。但我必须使用KVO。
其他信息:
这是我的初始化代码(在设置观察者之前):
UILabel* phoneNumberLabel=[[UILabel alloc]init];
font=[UIFont systemFontOfSize:numbersFontSize weight:UIFontWeightThin];
attributesDict=[NSMutableDictionary dictionaryWithObjectsAndKeys:font,NSFontAttributeName, nil];
phoneNumberLabel.attributedText=[[NSAttributedString alloc]initWithString:@"+7 " attributes:attributesDict];
两种方法都在主线程上运行。
UILabel
的框架足够大,可以分配。答案 0 :(得分:3)
如果您在.xib中使用了大小类来设置标签字体,那么属性文本可能无效。要正常工作,请从.xib文件中删除大小类
答案 1 :(得分:0)
看起来您缺少对字符串范围的属性赋值。例如,
NSMutableAttributedString *attributedPhoneNumber = [[NSMutableAttributedString alloc] initWithString:x];
[attributedPhoneNumber addAttribute:NSFontAttributeName value:font range:NSMakeRange(0, [attributedPhoneNumber length])];
self.phoneNumberLabel.attributedText = attributedPhoneNumber;
答案 2 :(得分:0)
尝试在viewDidLayoutSubviews
中调用您的方法。对我来说,它成功了。
我在viewDidLoad
中这样做,这是一个问题。