2011-01-17 17 views
4

私はUIScrollViewをオーバーレイするいくつかのUIButtonを含むビューを持っています。私は、オーバーレイビューでユーザーのやりとりを防止したいが、そのビューに含まれているUIButtonではできないようにしたい。ビューではユーザーインタラクションは無効になっていますが、サブビュー(UIButtons)で有効にされています

これらのビューを単一のビューにグループ化するのは、単一のプロパティを変更するだけで、ビューのすべてのボタンにアルファ変更を適用できるようにするためです。私はIOS 4.0でIBOutletCollectionに注目しましたが、IOS 3.0もターゲットにする必要があります。

以下のUIViewメソッドをオーバーライドするより簡単な方法がありますか?

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event; 
+0

あなたが禁止したいです何の相互作用?スクロールを無効にするプロパティがあります(f.i. –

+0

私は行動を禁止したくありません。私が実際にやりたいことは、ボタンの上に表示されていないユーザーのやりとりを、その下にあるUIScrollViewに渡すことです。 – Willster

答えて

3

残念なことに、ビューとのユーザーのやりとりを無効にすると、すべてのサブビューに対するユーザーのやり取りも無効になります。理想的ではありませんが、ボタンごとにIBOutletを作成し、それに応じて調整するだけで済みます。今後さらに多くのコードを書く必要がなくなるためには、viewDidLoadでNSArrayを作成して、各ボタンをそこに投げることができます。そして、それらのボタンのすべての属性の1つを変更したいときはいつでも、配列をループして変更することができます。そうすれば、グループに別のボタンを追加するだけで配列を更新すれば、残りの変更が自動的に伝播します。

+0

これが私のやり方です。ちょうど厄介なように思えた。誰かがより良いアイデアを出していない限り、私はこれを正しくマークします。 – Willster

0

を使用してスクロールビューのみを無効にします。scrollView.scrollEnabled = FALSE; ボタンを使用できるようにする場合。 を使用してユーザーがビューをスクロールするようにする場合は、再度有効にします。scrollView.scrollEnabled = TRUE;

注:スクロール表示のユーザー操作を無効にする必要はありません。

1

この回答を見てください:https://stackoverflow.com/a/13414182/2082569

これによると、カスタムUIViewの中でこのメソッドをオーバーライドする必要があります。

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event { 
    UIView *subview = [super hitTest:point withEvent:event]; 
    return subview == self.button ? subview : nil; 
} 
関連する問題