2016-11-03 7 views
0

私はこのようなUIViewを持っている。UIViewでユーザーインタラクションを無効にするか、UIViewでイベントに触れるが、サブビューで有効にする

enter image description here

私はそのビューに私の指を入れて、ちょうどピアノを弾くように、これらのボタンに沿ってドラッグする必要があります。問題は、最初のタッチポイントがメインビューにあり、ドラッグするとメインビューのイベントが発生し、ボタンのタッチイベントがトリガーされないということです。

この結果、これを入れています。

[self setUserInteractionEnabled:NO]; 

問題は、ボタンやその他のサブビューが無効になっていることです。タッチイベント、メインビューからのユーザーのやりとりを完全に無視したいが、すべてのサブビューを許可する。どうすればいいですか?

+0

スーパービューのユーザー操作を無効にすると、スーパービューに追加されたすべてのサブビューはクリックできません。したがって、キーボード・ビューをクリック可能にし、メイン・ビューをクリックできないようにするには、メイン・ビューにキーボードを追加しないでください。ウィンドウに追加することはできません。無効にしてもクリックイベントに応答します。その画面のメインビューのユーザー対話。うまくいけば... – Janmenjaya

+0

しかし、私はキーボードの拡張子のウィンドウに追加することはできません。 : –

+0

あなたが必要とする他のサブビューを別のビューに追加して、そのビューのユーザー操作を無効にすることができますか?つまり、ビューとキーボードビューをメインビューに追加し、そのビューに他のものを追加し、ユーザインタラクション、主な関心事は、キーボードビューのスーパービューのユーザインタラクションを無効にしないことである。 – Janmenjaya

答えて

0

通知イベントをkeyboardWillShowと、のスーパービューに対して設定し、keyboardWillHide通知で再度有効にすることができます。キーボードを隠す場合はGOボタンを使用するか、keyboardWillShowイベントが呼び出されたときに目に見えないUIButtonを画面の残りの部分に追加して、最初のレスポンダを終了することができます。

これが役に立ちます。

+0

私はカスタムキーボードをやっています。私はそれが有効ではないと思う、 –

0

メインビューにはUIViewのサブクラスを作成する必要があります。 - hitTest:withEvent:は常にキーの最も近いビューを返します。

継承のない別の解決策は、すべてのキーに完全なメインビューをカバーするが、メインビューを返すことはないように、すべてのキーに非表示の境界線を与えることです。

関連する問題