0

以下のように、ViewController の viewDidLoad メソッドで初期化された LongPress ジェスチャ レコグナイザがあります。

longPressGesture_= [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(displayTimeFlagCallout)];

ビューコントローラーにテーブルビューがあります。テーブルビューにはカスタム セルがあります。各セルには 2 つのテキストフィールドがあります。ユーザーがテキスト フィールド (startTime と endTime) を長押ししたときに、カスタム ポップオーバーを表示したいと考えています。拡大鏡とコピー/貼り付けポップオーバーが標準の動作としてテキストフィールドを長押ししたときに表示されないようにしたいため、ジェスチャ認識機能を追加する前に、テキストフィールドの組み込みの長押しジェスチャ認識機能を無効にしています。cellforRowAtIndexPath メソッドに次のコードを追加しました。

MyCustomCell_iPhone *cell = [tableView dequeueReusableCellWithIdentifier:cellID];

if (cell == nil)
  {
    cell = [[MyCustomCell_iPhone alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellID];


      for (UIGestureRecognizer *recognizer in cell.startTime.gestureRecognizers) {
          if ([recognizer isKindOfClass:[UILongPressGestureRecognizer class]]){
              recognizer.enabled = NO;
          }
      }
      for (UIGestureRecognizer *recognizer in cell.endTime.gestureRecognizers) {
          if ([recognizer isKindOfClass:[UILongPressGestureRecognizer class]]){
              recognizer.enabled = NO;
          }
      }

      [cell.startTime addGestureRecognizer:longPressGesture_];
      [cell.endTime addGestureRecognizer:longPressGesture_];


  }

ただし、これは機能していません。現在、長押ししても何も起こりません。何が問題になる可能性がありますか?

ありがとうヘタル

4

1 に答える 1

0

3つの考え:

  1. 2 つのコントロールに同じ長押しジェスチャ レコグナイザーを使用することはできません。コントロールごとに個別のジェスチャ認識エンジンを作成する必要があります。

  2. テキスト フィールドで編集を開始すると、ジェスチャ レコグナイザーがリセットされるように見えます (テキスト フィールドでの編集を許可していると仮定します)。テキスト フィールドの編集を許可していると思います。許可している場合は、自分のものではない長いジェスチャ レコグナイザーを無効にするデリゲートを設定する必要があると思います。(長押しジェスチャ認識エンジンの場合は、それをサブクラス化して、たとえば、テキストフィールドのジェスチャ認識エンジンに使用してから、自分のものではないオブジェクトをCustomLongPressGestureRecognizer無効にすることができます。)UILongPressGestureRecognizerCustomLongPressGestureRecognizer

  3. あなたのコードから、ストーリーボードとプロトタイプ セルを使用していないと推測します。そのシナリオでcellは決してなくnilifステートメントがコードを呼び出すことはないからです。しかし、NIB を使用している場合、またはプロトタイプ セルを使用していない場合は、この点で問題ないはずです。

于 2012-11-30T22:18:19.770 に答える