父视图 - >子视图 - >按钮 - >子视图方法
问题描述:
我有一个使用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