0

私は正常に動作しているこのスキームを持っています( -->= "サブビューがあります"):

ViewController.view --> imageView --> containerView --> UIButton

予想どおり、ボタンは指定されたセレクターを起動します。
ただし、次のことを行うと(いくつかの理由で望ましい)、ボタンは touches の受信を停止します。

ViewController.view --> imageView
ViewController.view --> containerView --> UIButton
[self.view bringSubviewToFront:_containerView]; 

手がかりはありますか?

- アップデート

リクエストに応じて、ボタン作成コードをいくつか示します。

// in viewDidLoad

_controlsView = [[[NSBundle mainBundle] loadNibNamed:@"Controls" 
       owner:self options:nil] objectAtIndex:0];
_controlsView.frame = CGRectMake(0, 50, 
      _controlsView.bounds.size.width, _controlsView.bounds.size.height);
[self.view addSubview:_controlsView];
// ...
[_controlsView.superview bringSubviewToFront:_controlsView];

// in viewDidAppear

if (!_demoButton) {
   _demoButton = (UIButton*)[_controlsView viewWithTag:kDemoButtonTag];
   [_demoButton addTarget:self action:@selector(buttonPressed:) 
       forControlEvents:UIControlEventTouchUpInside];
   // configuration, color, font, layer, etc. all works well
}

最後に、Controls.xib次のようになります。

IB のスクリーンショット

4

3 に答える 3

1

Probablyあなたのビューはあなたのボタンを支配しています。これで試してください

[self.view bringSubviewToFront:<UIButton_INSTANCE>];
于 2012-11-28T10:55:31.400 に答える
0

コンテナビューのフレームの外側にコントロール要素を設定したときに、これが発生することがあります。これはテストしていませんが、ネストされたビューが多数あるため、imageviewがUIButtonを囲むのに十分な大きさである可能性があるため、最初のインスタンスで発生する可能性があります。

于 2012-11-28T10:56:31.440 に答える
0

十分なコードがないため、これが発生した理由を正確に把握することは不可能です。

UIButton のカテゴリを記述して、次の-touchesBegan:withEvent: -touchesMoved:withEvent: -touchesEnded:withEvent:ようなデバッグ情報出力で上書きする必要があると思います。

{
    [super touchesBegan:touches withEvent:event];
    NSLog(@"Touches began/moved/ended!");
}

UIButton インスタンスを押してデバッグ情報が出力された場合、UIButton のインスタンスがタッチ イベントを受け取ったが、それを正しく処理していないことを意味します。逆に、応答チェーンにインスタンスがあり、イベント配信がブロックされていることを意味します。

特に、デバッグ情報が出力され始めたタッチのみが検出され、指を動かした後にタッチを移動したデバッグ情報が出力されなくなった場合は、タッチ イベントがジェスチャ レコグナイザーによってブロックされた可能性があります。

于 2012-11-28T11:26:15.660 に答える