2014-01-06 17 views
2

我目前正在处理的应用程序的设计者突然想要在应用程序中的每个表格视图单元格中大写文本。
在(几乎)每个tableview中,我使用一个名为'NormalListCell'的自定义UITableViewCell。 NormalListCell有一个UILabel属性叫'mainLabel',这是我想要的大写字母。
一种方式做这将是无处不在做到这一点:在UITableViewCell中大写文本

//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]]]; 
    } 
} 

但是这不会工作,因为我观察“文本”属性,并以-observeValueForKeyPath设置它:将再次调用此方法。

我可以停止观察,设置标签的文本,并再次添加自己作为观察者,但它似乎是一个非常hacky的解决方案。

这是'正确的'解决方案吗?有没有更好的方法来做到这一点?

+0

子类的'UILabel'并重写'-setText'方法 –

+0

@Midhun MP,我感觉令人难以置信的愚蠢:P可能太多咖啡。也许你应该添加评论作为答案? – SEG

回答

1

一个更好的方法是创建一个自定义标签并将其添加到您的自定义单元格中。

  1. 子类UILabel
  2. 覆盖的setText方法
  3. 这个自定义标签添加到NormalListCell