我正在处理的应用程序的设计者突然想要在应用程序的每个表格视图单元格中大写文本。
在(几乎)每个tableview中,我使用称为“NormalListCell”的自定义UITableViewCell
。 NormalListCell有一个名为'mainLabel'的UILabel
属性,这是我想要大写的属性。
一种方法是在任何地方都这样做:
//Previously: cell.mailLabel.text = _someLowerCaseString;
cell.mailLabel.text = [_someLowerCaseString uppercaseStringWithLocale:[NSLocale currentLocale]]];
但这似乎是最糟糕的方法,因为我必须手动浏览使用NormalListCell的每个文件。此外,无法保证设计不会再次发生变化。
KVO似乎是一个不错的主意。
- (void)awakeFromNib {
[super awakeFromNib];
[self.mainLabel addObserver:self forKeyPath:@"text" options:NSKeyValueObservingOptionNew context:NULL];
}
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
if (object == self.mainLabel) {
[self.mainLabel setText:[change[@"new"] uppercaseStringWithLocale:[NSLocale currentLocale]]];
}
}
但是这不起作用,因为我正在观察'text'属性并在-observeValueForKeyPath中设置它:将再次调用此方法。
我可以停止观察,设置标签的文本,再次添加self作为观察者,但这似乎是一个非常糟糕的解决方案。
这是'正确'的解决方案吗?有没有更好的方法呢?
答案 0 :(得分:1)
一种更好的方法是创建自定义标签并将其添加到自定义单元格中。
UILabel
setText
方法NormalListCell