多数の子ビューを含むビューがあり、子からのイベントを手動で中継することなく、子に発生するイベントに親ビューが応答できるようにしたいと考えています。
具体的には、ユーザーがサブビューのいずれかをタップするたびに親に通知する必要があるとしますが、サブビューのデフォルトのアクションに干渉することもありません。たとえば、UITextView をタップした場合、テキスト ビューをいつものようにファーストレスポンダーにしたいのですが、それについて知りたいだけです。
これどうやってするの?
多数の子ビューを含むビューがあり、子からのイベントを手動で中継することなく、子に発生するイベントに親ビューが応答できるようにしたいと考えています。
具体的には、ユーザーがサブビューのいずれかをタップするたびに親に通知する必要があるとしますが、サブビューのデフォルトのアクションに干渉することもありません。たとえば、UITextView をタップした場合、テキスト ビューをいつものようにファーストレスポンダーにしたいのですが、それについて知りたいだけです。
これどうやってするの?
「多くのイベントの手動中継なし」が「NSNotificationCenterなし」を意味するかどうかはわかりません。
[[NSNotificationCenter defaultCenter] postNotificationName:@"subViewTouched" object:subView.tag];
// Where you set up tag as each subview's unique id
繰り返しますが、特に使用しないことを検討しているかどうかはわかりませんNSNotificationCenter
。
必ず委任を使用するか、UI 要素をパブリック プロパティとして設定し、View Controller でイベントを配線してください。委任はより良いルートです。私の意見では、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
}