2010-06-24 45 views
2

我想用相同的文本在用IB創建的不同UIViews上填充多個UILabel。填充UILabel文本而不連接IBOutlet

現在我正在做它將每個標籤連接到一個IBOutlet並以常量文件上定義的常量字符串以編程方式填充文本。

我想要的是避免與IBOutlet的連接,以便我可以鏈接IB中所需的字符串標記。

我可以這樣做嗎?也許只有一種語言的本地化(ibtool)?

+0

如果您需要爲常量文件的每次更改重新構建,那麼可以嗎?對於單個「會話」或應用程序的整個生命週期常量是常量嗎?你真的試圖本地化您的應用程序,或者這只是一個類似的情況的例子嗎? – Steve 2010-07-22 21:31:24

回答

4

我想你可以繼承的UILabel:

@interface MyLabel : UILabel { 
} 

@end 

@implementation MyLabel 

- (void) awakeFromNib { 
    self.text = @"MyText"; // load text from your constants file here 
} 

@end 

,並設置類IB到MyLabel。如果你想要在多個標籤上使用多個字符串,可以使用IB標籤擴展它,並在awakeFromNib中檢查它們(將它們匹配到常量文件中的一個鍵)。

+0

這不完全是我在想什麼,但這是一個好方法。謝謝約翰。 – emenegro 2010-06-25 08:26:22

1

其中一個方法可以是這樣的:

  1. 在IB創建所有的UI組件。
  2. 爲每個控件定義適當的(唯一的)標籤。
  3. 在應用程序中,轉到您窗口中的內容視圖(這是所有控件的超視圖)並獲取所有的子視圖(子視圖數組是控件)。
  4. 編寫一個邏輯來管理您檢索的具有特定標籤的所有控件。
  5. 執行相應的控制操作。

即使你有不同的筆尖或查看重複這種方法來獲取詳細

0

假設它們都在同一個NIB文件,您可以通過NIB的內容迭代尋找的UILabel實例和然後將文本分配給存在的標籤。爲了更細緻的控制,請使用Interface Builder標籤併爲您希望修改的標籤分配一個編號。

NSString *myStr = @"Bob"; 
NSArray *contents = [[NSBundle mainBundle] loadNibNamed:@"NameOfViewNib" owner:self options:NULL]; 

for(id nibItem in contents) { 
    if ([nibItem isKindOfClass:[UILabel class]]) { 
     UILabel *lbl = (UILabel*)nibItem; 

     /* Optionally check for a particular tag if you want to filter them */ 
     if (lbl.tag == 1) { 
      lbl.text = myStr; 
     } 
    } 
}