2014-01-06 53 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