2014-02-12 107 views
1

我有一個ViewController和一個View在單獨的文件。 在ViewController我添加了查看這樣的:從ViewController訪問視圖子視圖

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 

     mainView = [[MainView alloc] init]; 
     [self setView: mainView]; 

    } 
    return self; 
} 

在這種mainView有一個標籤,添加爲SubView。我想更改我的控制器中的標籤文字。我會怎麼做?

我無法弄清楚如何從控制器訪問標籤。

+0

是的MainView自己的UIView子類標記您的標籤? – Linuxios

+0

是否已經使用屬性公開聲明瞭該標籤? –

+0

MainView是我UIView的子類。 我剛剛在這個Views .h文件中聲明瞭標籤,但不是作爲一個屬性。 – DontMind

回答

1

該標籤需要暴露在MainView中,例如,屬性。

然後你就可以訪問該屬性,如:

[[(MainView *)[self view] labelProperty] setText: @"foo"]; 

或者更可讀:

MainView *mainView = (MainView *)self.view; 
mainView.labelProperty.text = @"foo"; 
+0

謝謝,多數民衆贊成我正在尋找。 – DontMind

0

如果mainView只有標籤作爲一個子視圖和沒有其他子視圖您可以輕鬆地訪問帶標籤

UILabel *label = (UILabel *)[mainView.subviews objectAtIndex:0]; 

,然後設置其文字如下:

label.text = @"your text"; 

這就是「快速和骯髒」的方式。


一個更好的解決是爲要修改的每個子視圖中創建您的ViewController一個property。 CTRL +拖動標籤到您的ViewController.h文件的Xcode應該自動添加行

@property (strong, nonatomic) IBOutlet UILabel *label; 

然後你可以從任何地方與

label.text = @"your text"; 
+1

標籤必須始終是mainView的第一個子視圖 - 對視圖層次結構的任何更改都會破壞此代碼。 –

+0

這是正確的。第二個解決方案與你和@msk提供的幾乎相同,這個解決方案要好得多,應該使用。第一個解決方案是快速和骯髒的方式。 – Mischa

+1

謝謝你的回答和你的編輯。如果我可以將幾個答案標記爲接受,我會這樣做,我標記了Alexanders,因爲這是我第一次嘗試。 – DontMind

0

另一種方法輕鬆地訪問的標籤在你ViewController

在MainView.m要在其中創建它

yourLabel.tag = 'urlb' 

在你的ViewController

UILabel *lbl = (UILabel *)[mainView viewWithTag:'urlb']; 
[lbl setText: @"what is the problem"]; 
+0

謝謝。這可能是標籤的用途,看起來不錯,乾淨,但現在我與Alexanders一起回答,因爲它適合我目前面臨的任務。 – DontMind