0

Apple のドキュメントにあるように、ジェスチャを処理するプロセスは次のとおりです。

  1. 初期ビューは、イベントまたはメッセージを処理しようとします。イベントを処理できない場合は、イベントをそのスーパービューに渡します。これは、初期ビューがそのビュー コントローラーのビュー階層の最上位のビューではないためです。

  2. スーパービューはイベントの処理を試みます。スーパービューがイベントを処理できない場合、スーパービューはまだビュー階層の最上位ビューではないため、イベントをスーパービューに渡します。

  3. ビュー コントローラーのビュー階層の最上位のビューが、イベントの処理を試みます。最上位のビューがイベントを処理できない場合、そのビュー コントローラーにイベントを渡します。

  4. ビュー コントローラーはイベントの処理を試み、処理できない場合は、イベントをウィンドウに渡します。

  5. ウィンドウ オブジェクトがイベントを処理できない場合は、イベントをシングルトン アプリ オブジェクトに渡します。

  6. アプリ オブジェクトがイベントを処理できない場合、イベントは破棄されます。

ただし、私の場合、window のルート vc として UITableViewControllerのサブクラスがあり、次のように画面全体をカバーするビューを追加します。

@interface MyTableViewController : UITableViewController()
@end

@implementation MyTableViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    UIView *redView = [[UIView alloc] initWithFrame:self.view.bounds];
    redView.backgroundColor = [UIColor redColor];
    [self.view addSubview:redView];
}

画面にタッチしてパン ジェスチャを生成すると、redView がヒット テスト ビューになると思います。redView はそれを処理できないため、タッチ イベントをそのスーパービューに渡します。 . その結果、テーブルビューはパン ジェスチャを処理しません。ただし、tableView は引き続きパン ジェスチャを処理できますが、誰か説明できますか?

4

2 に答える 2