だから私はコンテナビューを持つView Controllerを持っています。コンテナー ビューには、ビュー コントローラーの親コントローラーでもあるナビゲーション コントローラーが組み込まれています。ストーリーボードは次のようになります。
ビュー コントローラ( mainViewController
) --> ナビゲーション コントローラ --> ビュー コントローラ( contentViewController
)
以下にストーリーボードのスクリーンショットを示します。
最初の矢印は、コンテナー ビューからナビゲーション コントローラーへの埋め込みセグエです。contentViewController
2 番目の矢印は、ナビゲーション コントローラーのルート ビュー コントローラーを表す関係です。
mainViewController
とcontentViewController
は、 という名前の同じクラスのオブジェクトですtestViewController
。UIViewController のサブクラスです。その実装は簡単です。IBAction
メソッドは 3 つだけで、他には何もありません。実装コードは次のとおりです。
#import "TestViewController.h"
@implementation TestViewController
- (IBAction)buttonTapped:(id)sender {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil
message:@"button is tapped"
delegate:self
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alert show];
}
- (IBAction)barButtonTapped:(id)sender
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil
message:@"bar button is tapped"
delegate:self
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alert show];
}
- (IBAction)viewTapped:(id)sender {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil
message:@"view is tapped"
delegate:self
cancelButtonTitle:@"OK"
otherButtonTitles: nil];
[alert show];
}
@end
のコンテナ ビューに Tap Gesture Recognizer を追加しましたmainViewController
。コンテナビューがタップされたときにviewTapped:(id)sender
メッセージを送信します。mainViewController
のルートビューの中に、タップすると にメッセージをcontentViewController
送るボタンがあります。また、ツールバーにはバーボタンがあり、タップするとメッセージが送信されます。最初のシーンは. アプリの実行中、バー ボタンのタッチ イベントのみがブロックされ、タッチ イベントはボタンによって正しく処理されることがわかりました。Apple のドキュメントRegulating the Delivery of Touches to Viewsには、次のように書かれています。buttonTapped:(id)sender
contentViewController
contentViewController
barButtonTapped:(id)sender
contentViewController
mainViewController
単純なケースでは、タッチが発生すると、タッチ オブジェクトが UIApplication オブジェクトから UIWindow オブジェクトに渡されます。次に、ウィンドウは、ビュー オブジェクト自体にタッチを渡す前に、まず、タッチが発生したビュー (またはそのビューのスーパービュー) にアタッチされたジェスチャ レコグナイザーにタッチを送信します。
タッチイベントはボタンに渡されないと思いました。これは本当に私を混乱させました。誰かがこの動作を説明できますか? どうもありがとうございました。
ストーリーボードのスクリーンショット: