我有一个包含许多子视图的视图,我希望父视图能够响应其子节点发生的事件,而不需要大量手动中继来自子节点的事件。
具体来说,假设我希望在用户点击其任何子视图时通知父级,但也不会干扰子视图的默认操作。例如,如果你点击UITextView,我希望文本视图像往常一样成为第一个响应者,我只想知道它。
我该怎么做?
答案 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
}