UIViewはUIResponderを継承している。UIControlはUIViewのサブクラス。つまりInterface Builderで構築されるUIはすべてレスポンダ。イベントは一番手前(? ユーザー直面しているビュー)のレスポンダにまず渡される。イベントを渡されたビューが処理しない場合、次のレスポンダに渡されていき、レスポンダの階層をさかのぼっていく。適時イベントが処理される部分が現れると、イベントは処理され破棄されて、イベントが終了する。
ということらしい。
レスポンダに記述する、イベントを処理するメソッドはこんな感じ。UIEventとしてイベントが渡されている。
- - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
- {
- NSUInteger numTaps = [[touches anyObject] tapCount];
- NSUInteger numTouches = [touches count];
- NSLog(@"タップの回数 : %d",numTaps);
- NSLog(@"タッチの数: %d",numTouches);
- }
Interface Builderで作ったUIでは、イベントはそのビュー(UIButtonとか)でキャッチされて、IBActionとして指定したViewControllerのメソッドに処理がバイパスされていると考えるということかな