父视图 - >子视图 - >按钮 - >子视图方法

问题描述:

我有一个使用ui视图的父视图。这会在viewdidload上加载一个子视图控制器。子视图控制器上有一个按钮,它可以在触摸时连接到一个名为clicked的子视图控制器方法。父视图 - >子视图 - >按钮 - >子视图方法

这会导致访问错误,导致应用崩溃并崩溃。我的问题是,这种设置是可能的还是必须在父视图中有方法?子视图将在8个不同的父视图中加载,所以我想将该方法保留在子视图中。

这样做的正确方法是什么?

+0

我认为这将是张贴各地的崩溃相关的代码是一个好主意。 – DarkDust 2010-08-31 18:05:52

+0

该方法运行时崩溃。该方法是空的,我想知道什么是最好的做法,而不是代码特定的。谢谢 – Skeep 2010-08-31 18:37:09

+0

任何设置都是可能的。崩溃是代码特定的。 – 2010-08-31 18:43:36

这种设置的好方法是有一个协议,包括点击消息,包含按钮的视图中的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 
} 

希望这有助于...