2017-07-05 28 views
0

私はこの機能を実装していました。navigationController.viewでタッチを検出するにはどうすればよいですか?

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 
    guard let point = touches.first?.location(in: self.view) else { return } 

    for i in 0..<paths.count { 
     if paths[i].contains(point) { addViews(selectedView: i); break } 
    } 
} 

私の設計者は、ナビゲーションバーをオーバーレイするために追加するビューの一部を作りたいと決めました。問題は、代わりにnavigationController.viewにビューを追加した後、私はもはやタッチを検出できなくなることです。私は場所(:self.navigationController.view)を試して、それは動作しませんでした。誰かが私のために簡単な答えを持っている無限の別のもののうさぎの穴を下に行く前に、? navigationBar overlay example

答えて

0

navigationControllerは名目上はViewControllerですが、 'view'アウトレットは通常は使用されず、おそらくレスポンダチェーンには入れられません。

私の解決策は、UIViewControllerのnavigationItem.titleViewのコンセントとしてカスタムビュー(ストーリーボード内)を作成することでした。

あなたは私のようなジェスチャーの設定(代わりに絵コンテの))(のviewDidLoadでのviewDidLoadで

self.navigationItem.titleView = myCustomView; 

をカスタムビューを設定することができます。私はより明確にされている必要があります

UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleStatusTap:)]; 
[chatTitleView addGestureRecognizer:singleTap]; 
+0

を。 TapRecognizerはビューでのみ機能し、特にUIBezierPathを使用してタップを検出するのは、同じビュー内の複数のレイヤーであるためです。写真を編集して投稿して、理解しやすくします。 – Sethmr

+0

クールで、レイヤーをviewController.viewに戻し、ナビゲーションバーを非表示にするか、またはnavigationControllerからviewControllerを削除することがあります。 – FryAnEgg

関連する問題