0

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

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

我怎样才能做到这一点?

4

2 回答 2

1

不确定“没有大量手动中继事件”是否意味着“没有 NSNotificationCenter”,如果不是,您可以使用:

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

同样,不确定您是否要明确不使用NSNotificationCenter.

于 2013-07-19T21:00:50.067 回答
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
}
于 2013-07-19T21:45:27.570 回答