1

コード

呼び出されたのサブクラスに呼び出されたUILongPressGestureRecognizerジェスチャ認識エンジンを追加するコードがいくつかあります。_recognizerUITableViewCellcell

...
UILongPressGestureRecognizer *_recognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(cellLongPressRecognized:)];
_recognizer.allowableMovement = 20;
_recognizer.minimumPressDuration = 1.0f;
[[cell contentView] addGestureRecognizer:_recognizer];
[_recognizer release];
...

-cellLongPressRecognized:セレクターは、ジェスチャが終了したときに単純にログに記録します。

- (void) cellLongPressRecognized:(id)_sender {
    if (((UILongPressGestureRecognizer *)_sender).state == UIGestureRecognizerStateEnded)
        ALog(@"[MyViewController] -cellLongPressRecognized: gesture ended...");
}

セルをタップして押したまま離すと、コンソールに 1 つのログ メッセージが表示されます。

[MyViewController] -cellLongPressRecognized: gesture ended...

ここまでは順調ですね。

問題

_recognizer.minimumPressDuration問題は、テーブル セルの背景がプロパティである 1.0 秒の間だけ選択されたままになることです。

デバイス上で 1.0 秒以上指を離すと、セルの背景がUITableViewCellSelectionStyleBlue選択スタイルから通常の不透明な選択されていない背景に戻ります。

ジェスチャ固有のコードのみがこの問題に関係していることを確認するために、-tableView:didSelectRowAtIndexPath:テスト中に無効にしました。

質問

背景を無期限に選択したままにして、「長押し」ジェスチャが終了したときにのみ元に戻すにはどうすればよいですか?

4

1 に答える 1

3

テスト条件を から に変更しUIGestureRecognizerStateEndedましUIGestureRecognizerStateBeganた。ジェスチャは、セルの選択状態の変化に合わせて調整されます。

- (void) cellLongPressRecognized:(id)_sender {
    if (((UILongPressGestureRecognizer *)_sender).state == UIGestureRecognizerStateBegan)
        ALog(@"[MyViewController] -cellLongPressRecognized: gesture began...");
}

このようにイベントに名前を付けるのは直感に反するようですが、うまくいくようです。

于 2010-07-16T00:48:45.803 に答える