1
我有一個使用ui視圖的父視圖。這會在viewdidload上加載一個子視圖控制器。子視圖控制器上有一個按鈕,它可以在觸摸時連接到一個名爲clicked的子視圖控制器方法。父視圖 - >子視圖 - >按鈕 - >子視圖方法
這會導致訪問錯誤,導致應用崩潰並崩潰。我的問題是,這種設置是可能的還是必須在父視圖中有方法?子視圖將在8個不同的父視圖中加載,所以我想將該方法保留在子視圖中。
這樣做的正確方法是什麼?
我有一個使用ui視圖的父視圖。這會在viewdidload上加載一個子視圖控制器。子視圖控制器上有一個按鈕,它可以在觸摸時連接到一個名爲clicked的子視圖控制器方法。父視圖 - >子視圖 - >按鈕 - >子視圖方法
這會導致訪問錯誤,導致應用崩潰並崩潰。我的問題是,這種設置是可能的還是必須在父視圖中有方法?子視圖將在8個不同的父視圖中加載,所以我想將該方法保留在子視圖中。
這樣做的正確方法是什麼?
這種設置的好方法是有一個協議,包括點擊消息,包含按鈕的視圖中的id類型的委託屬性以及在同一視圖中激活委託消息的方法,如[self .delegate點擊]。 TouchUpInside事件鏈接到IB中的該方法,並且父視圖將其自身設置爲子視圖的委託並將其自身符合該協議。這聽起來有點棘手,但它絕對是正確的做法。
在子視圖的實現在子視圖界面
@interface viewWithButton {
...
id<viewWithButtonDelegate> delegate;
}
...
@property (nonatomic, retain) id<viewWithButtonDelegate> delegate
-(void)buttonClicked:(id)sender;
...
@end
議定書
@protocol viewWithButtonDelegate
-(void)buttonClicked:(UIButton*)button inView:(UIView*)view;
@end
-(void)buttonClicked:(id)sender {
if([sender class] == [UIButton class]) {
[self.delegate buttonClicked:(UIButton*)sender inView:self]
}
}
控制器接口聲明如下
@interface myController<viewWithButtonDelegate>
終於在控制器實現:
-(void)buttonClicked:(UIButton*)button inView:(UIView*)view {
//do something in response to button clicked
}
希望這有助於...
我認爲這將是張貼各地的崩潰相關的代碼是一個好主意。 – DarkDust 2010-08-31 18:05:52
該方法運行時崩潰。該方法是空的,我想知道什麼是最好的做法,而不是代碼特定的。謝謝 – Skeep 2010-08-31 18:37:09
任何設置都是可能的。崩潰是代碼特定的。 – 2010-08-31 18:43:36