21

私は、それぞれのハイライトしたアクションをUIScrollViewロードしました。UIButtonsUIButtonUIImageUIButton

次のように設定しないdelaysContentTouchesと、非常に速くタッチアップしてもNOハイライト表示されません。プロパティを設定した後、強調表示されたものだけが表示されます。UIImageUIButtonUIButtondelaysContentTouchesNOUIButtonUIImage

delaysContentTouchesプロパティを NOに設定した後UIScrollViewUIScrollViewをドラッグしてもスクロールできませんUIButtons。さて、どうすればこの問題を解決できますか。

アドバイスをください。

前もって感謝します。

4

6 に答える 6

40

これが私にとってうまくいくものです。UIScrollView をサブクラス化し、このメソッドのみを実装します。

- (BOOL)touchesShouldCancelInContentView:(UIView *)view {
    return YES;
}

次に設定delaysContentTouches = NO;

出来上がり!ホーム画面と同じように機能します: ボタンをすぐに強調表示しますが、スクロールは可能です :)

于 2014-01-15T22:25:50.773 に答える
7

OK私は以下の方法を実装することで解決しました:

- (BOOL)touchesShouldCancelInContentView:(UIView *)view
{
    NSLog(@"touchesShouldCancelInContentView");

    if ([view isKindOfClass:[UIButton class]])
        return NO;
    else
        return YES;
}
于 2013-07-18T11:05:02.043 に答える
3

これまでオンラインで満足のいく解決策を見つけることができませんでした (Apple はこの問題を無視しているようです)。Apple の開発者フォーラムで、役立つかもしれないいくつかの提案を含むスレッドを見つけました: UIScrollView: 'delaysContentTouches' は無視されました

このリンクの回避策を使用できました。回避策を要約するには(ここでパラ引用しています):

UIEvent オブジェクトにはタイム スタンプが含まれています。

埋め込みサブビューで touchesBegan の時点でタイムスタンプを記録できます 。

scrollView のサブビューの touchesMoved で、タイムスタンプと場所をもう一度確認します。

タッチがあまり動かず、たとえば 0.1 秒以上経過している場合、ユーザーがサブビューにタッチしてから動きを遅らせたと見なすことができます。

この場合、UIScrollView は、これがスクロール アクションではないことを独立して判断しますが、そのことをユーザーに通知することはありません。

したがって、ローカル状態変数を使用して、この遅延移動の状態が発生したことをフラグし、サブビューによって受信されたイベントを処理できます。

これが私のコードです:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
    // store the timestamp
    _beginDragTimeStamp = event.timestamp;    

    // your embedded subview's touches begin code
}

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{
   // compare and ignore drag if time passed between tap and drag is less than 0.5s
   if(event.timestamp - _beginDragTimeStamp < 0.5) return;

   // your drag code
}
于 2013-10-23T18:36:11.957 に答える
2

ビューの同じ問題と同じ階層がありました。最新のSDKを使用して、それを使用してください:

同じ UITableViewCell 内の UIButton に対して delaysContentTouches を NO に設定します。

self.scrollview.delaysContentTouches = NO
于 2016-08-23T06:06:28.237 に答える