1

UIScrollViewビュー内にあるUIView内の2つのUIButtonがiOS 5ではクリックできないが、iOS 6では完全に正常に動作するという奇妙なバグがあります(スクリーンショットはスクローラーと下のマップを示しています)

他の唯一の詳細は、ステーションが選択されたときにボタンを表示するために「上にスライド」するスクローラー ビューです。iOS 5 でボタンを選択しようとしましたが、(視覚的に) ボタンはヒットしますが、イベントは発生しません。

編集:シミュレーターのボタンをタップアンドホールドし、カーソルを画面の上に移動して放すと (たとえば、常に表示されていた UIView の部分に)、イベントが発生します。

スクローラーのサンプル

スクロール ビュー自体には次の設定があります。後者の 2 つは、iOS 5 でボタンを機能させるためだけに追加されたものです (さまざまな組み合わせを試しました)。

self.scrollView.clipsToBounds = YES;
self.scrollView.scrollEnabled = YES;
self.scrollView.pagingEnabled = YES;
self.scrollView.delaysContentTouches = NO;
self.scrollView.canCancelContentTouches = NO;

ボタンイベントはすべて、適切なターゲットなどで正しく配線されています。

[_updatePriceButton addTarget:self action:@selector(showPriceUpdateBoxWithPrice:) forControlEvents:UIControlEventTouchUpInside];
[_stationDetailsButton addTarget:self action:@selector(stationDetailsSelected:) forControlEvents:UIControlEventTouchUpInside];

およびハンドラー (サンプルとして 1 つを次に示します):

- (void)stationDetailsSelected:(id)sender {
    if ([self.delegate respondsToSelector:@selector(stationDetailsSelected:)]) {
        [self.delegate stationDetailsSelected:_station];
    }
}

どんな助けでも素晴らしいでしょう!

4

1 に答える 1

6

犯人を見つけました-UIButtonsが置かれているUIViewの誤って構成されたUITapGestureRecognizer:

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(stationInfoViewTapped:)];
[infoController.view addGestureRecognizer:tap];

「タップ」の初期化の後に次を追加するだけで、iOS 5 の問題が解決します。

[tap setCancelsTouchesInView:NO];
于 2013-03-25T23:19:24.277 に答える