20

ビューコントローラUIButtonのプロパティとしてxibファイルからロードされるを持っています。ビューコントローラIBOutletのボタンにセレクタを接続します。viewDidLoad

[_myButton addTarget:self action:@selector(mySelector) forControlEvents:UIControlEventTouchUpInside];

iOS 6ではすべてが機能しますが、iOS 5.0のシミュレーターで実行すると、セレクターが呼び出されません。ボタンをタッチすると、ボタンがハイライト表示されます。

もう1つの注意点は、ボタンがに追加されたボタンにあるUIViewことUITapGestureRecognizerです。このビューのUITapGestureRecognizerforは、ボタンがタップされたときにiOS 5.0で呼び出されます(ボタンのセレクターが代わりに呼び出されるiOS 6では呼び出されません)。

iOS 5を実行しているデバイスを持っていないので、デバイスではテストしていません。シミュレーターだけです。

ここで何が起こっているのか、そしてそれを解決する方法を誰かが知っていますか?

4

2 に答える 2

24

あなたは問題の原因を非常に美しく説明してくれました。iOS 5 では、ボタンのスーパービューの UITapGestureRecognizer がボタンのアクションを妨げます。iOS 6 では、これを修正しました。UIView イベントが導入さgestureRecognizerShouldBegin:れ、スーパービューに接続されたタップ ジェスチャ レコグナイザーに対してボタンが自動的に NO を返します。

iOS 5 の場合、タップ ジェスチャ レコグナイザでデリゲート メソッドを使用して、タップされたビューがボタンであるかどうかを認識しないようにする必要があります。

于 2013-01-16T17:40:29.170 に答える
0

私の場合、UITapGestureRecognizerユーザーがメイン ビューの任意の場所をタップしたときに、テキスト フィールドによって開かれたキーボードを閉じるためにジェネラルも使用していました。

キーボードが表示されたときにジェスチャ認識エンジンを追加するだけでこれを修正しました(

- (void)keyboardWillShow:(NSNotification *)nまた

- (BOOL)textFieldShouldBeginEditing:(VDTextFieldWithError *)textField)

次に、キーボードを非表示にするときにジェスチャーレコグナイザーを削除します(したがって、レコグナイザー自体のセレクターメソッドでセレクターを削除します)

于 2013-03-01T13:47:25.473 に答える