0

一部のUIViewでタッチイベントに応答しようとしています。ビューコントローラがIBでどのように表示されるかを次に示します。

ここに画像の説明を入力してください

ビューの階層は次のとおりです。

ここに画像の説明を入力してください

次のように、4つの「タッチ」メソッドすべてを実装しました。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
    UITouch *touch = [touches anyObject];
    if(touch.view==locPhoneView){
        locPhoneView.backgroundColor=[ColorUtility colorWithHexString:@"83d3f0"];
    }
    if(touch.view==locAddressView){
        locAddressView.backgroundColor=[ColorUtility colorWithHexString:@"83d3f0"];
    }
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
    UITouch *touch = [touches anyObject];
    if(touch.view==locPhoneView){
        locPhoneView.backgroundColor=[UIColor whiteColor];
    }
    if(touch.view==locAddressView){
        locAddressView.backgroundColor=[UIColor whiteColor];
    }

}
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event{

}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{

}

画面のどこをタッチしても、イベントは送信されません。「touchesBegan」の先頭にブレークポイントがあり、このコードに到達することはありません。

すべてのビューで[ユーザーインタラクションが有効]がオンになっており、アウトレットに適切に接続されています。

私は何が欠けていますか?私のプロジェクトの他の場所でも同じことをしていますが、うまく機能しています。

ルートビューがUIScrollViewであるという事実に関連している可能性がありますか?

ありがとう!

編集:私は以下のアドバイスに従い、タッチがNextResponderに送信されるようにUIScrollViewをサブクラス化しました。今は少し触れているようですが、ビューの背景色が実際に変化するかどうかが正しく動作していません。

たとえば、ビューをすばやくタップすると、「タッチ」メソッドが起動しますが、背景色は変わりません。ただし、1秒ほど長押しすると、思ったとおりに背景色が変わります。何がこの奇妙な振る舞いを引き起こしているのか考えてみませんか?

編集:行を追加する:

[scrollView setDelaysContentTouches:NO];

私のviewDidLoadメソッドにこの問題を解決しました。ご協力いただきありがとうございます!

4

1 に答える 1

1

正解です。問題は、ビューがUIScrollViewに配置されることです。スクロールビューはすべてのタッチイベントを取得しており、それらをサブビューに渡しません。

この問題の解決策を得ることができます:

于 2012-10-04T17:23:48.820 に答える