2011-07-01 29 views
0

我有2個視圖控制器AViewController和BViewController爲例。我想在第一個AViewController的第二個BViewController中添加一個UI元素。我以爲我會通過類方法實現這一點,但從AViewController調用時,UIView在BViewController的類方法中不可訪問。 BViewController +(無效)addThatButton { 的UIButton * BTN = ...... 的使用類方法訪問UIView?

實現[self.view addSubview:BTN]; // < ==錯誤 //[BViewController.view addSubview:btn]; // < ==同樣錯誤 }

AViewController的實現 [BViewController addThatButton];

我得到的錯誤消息是「請求成員」視圖「的東西不是結構或聯盟」。如何以正確的方式實現我所需要的,換句話說,如何從A類訪問BViewController視圖?

感謝

回答

1

您需要BViewController

創建一個函數

在BViewController.h

UIButton *btnB; 

-(void)passButtonFromA:(UIButton *)btn; 

在BViewController.m

-(void)passButtonFromA:(UIButton *)btn{ 
    btnB = btn; 
} 

-(void)viewWillAppear:(BOOL)animated{ 

    [self.view addSubView:btnB]; 
} 

在AViewController.m

BViewController *bViewController =[[BViewController alloc]initWithNibName:.. ...]; //allocated bViewController using your nib file 
[bViewController passButtonFromA:btnA]; 
[self.navigationViewController pushViewController:bViewController animated:YES]; 
+0

非常感謝你,讓我試試... – Vad

+0

此方法是否需要類方法? – Vad

+0

- (void)passButtonFromA:(UIButton *)btn; – Vad

0

簡單的回答:「+」方法是一種靜態方法,「自我」不是指實例,而是指類。因此self.view是沒有意義的。

如果您更改爲「 - 」方法,並且以某種方式獲取了您的AViewController中的BViewController實例的地址並在調用中使用了該地址,那麼您的基本方案將會起作用(有幾點注意事項)。

0

我以爲我會通過類方法做到這一點,但從AViewController調用時,UIView在BViewController的類方法中不可訪問。

這是因爲沒有UIView來訪問。類方法獨立於任何實例運行。如果你想要更新一個特定的對象,那麼你需要調用它的一個實例方法。