父视图是否有办法检测子视图上的事件?

时间:2013-07-19 20:54:50

标签: ios

我有一个包含许多子视图的视图,我希望父视图能够响应其子节点发生的事件,而不需要大量手动中继来自子节点的事件。

具体来说,假设我希望在用户点击其任何子视图时通知父级,但也不会干扰子视图的默认操作。例如,如果你点击UITextView,我希望文本视图像往常一样成为第一个响应者,我只想知道它。

我该怎么做?

2 个答案:

答案 0 :(得分:1)

不确定“没有很多手动转发事件”你的意思是“没有NSNotificationCenter”,如果没有你可以使用:

[[NSNotificationCenter defaultCenter] postNotificationName:@"subViewTouched" object:subView.tag]; 
// Where you set up tag as each subview's unique id

同样,不确定您是否希望明确不使用NSNotificationCenter

答案 1 :(得分:0)

绝对使用委托,或将您的UI元素设置为公共属性,并在视图控制器中连接事件。授权是更好的途径。在我看来,NSNotificationCenter很难调试并且容易出错。使用委托。

·H

@protocol MyViewDelegate;

@interface MyView : UIView
@property(weak, nonatomic) id<MyViewDelegate> delegate;
@end

@protocol MyViewDelegate <NSObject>
-(void)myViewButtonClicked:(MyView*)myView;
@end 

的.m

-(void)onButtonClick:(id)sender {
    if(self.delegate) {
        [self.delegate myViewButtonClicked:self];
    }
}

处理视图控制器中的委托方法

-(void)myViewButtonClicked:(MyView*)myView {
    //handle whatever
}