web-dev-qa-db-ja.com

UITableView didSelectRowAtIndexPath:最初のタップで呼び出されていません

UITableView'sdidSelectRowAtIndexPathに問題があります。

行を選択すると、新しいView Controllerが初期化されてプッシュされるように、テーブルがセットアップされています。

テーブル内の行を初めてタップしても、メソッドは呼び出されません。別の行を選択すると、通常どおり動作し始めます。

didSelectRowAtIndexPathにブレークポイントを設定して、これを確認しました。メソッドにNSLogを追加すると、新しいView Controllerを最終的にプッシュする2番目の行を選択すると、コンソールに2つのログステートメントが同時に表示されることがわかります。

助言がありますか?

349
Mark Adams

誤って入力した可能性はありませんでしたselectRowAtIndexPath?

1338
Ole Begemann

また、xibファイルのテーブルビューの選択プロパティを確認します。必要に応じて「単一選択」または「複数選択」を使用します。

24
includeMe

次の問題が発生しました。

  • 最初の行をタップ->効果なし、選択なしnever
  • 2回目をタップし、続いて->正しい選択動作、常に

私の場合、エラーはInterface BuilderでShow Selection on Touchをチェックしていました。 IBでチェックを外すことができます:

enter image description here

誰かを助けることを願っています

17
sonxurxo

クラスにジェスチャー認識機能を設定しているかどうかを確認します。ジェスチャーを削除することは私にとってはうまくいきました。

11
YSR fan

私は、この答えを投稿することさえ議論しました。なぜなら、これが顕現するために星は一種整列していると思うからです。

この問題のバリエーションがあり、他の解決策を確認しました。テーブルビューでは、最初のタップでテーブルの最後の行が処理されません。強調表示されていますが、didSelectRowAtIndexPathは呼び出されていません。他のすべての行は正常に機能します。しかし、TableViewバウンスをオンにすると、問題は解決したように見えます(ただし、TableViewバウンスに対処する必要があります)。

6
Chase Roberts

UITableViewCellSelectionStyleNoneは、その問題を表示するセルに設定されました(ios9)。

私は電話をしました

[tableView deselectRowAtIndexPath:indexPath animated:NO];

で最初のもの

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

これは同じではありませんが、十分です。 ios10がどんな種類のテーブル破損をもたらすのか不思議に思う。

4
Anton Tropashko

この問題は、tableView内でジェスチャレコグナイザを使用している場合にも発生します。この場合、それらを削除する必要はありません。ジェスチャプロパティcancelsTouchesInView = falseを確認する必要があります。ジェスチャーが認識されたとき。

1
Ayoub Nouri

スイフト2

これがtrueに設定されていることを確認してください。

self.tableView.allowsSelection = true

これをviewDidLoad()の後、super.viewDidLoad()の前の右上に置きます

1
Lukesivi

クラスでUITapGestureRecognizerを設定している場合、didSelectRowAtIndexPathに次の行を追加できます。

[tableView deselectRowAtIndexPath:indexPath animated:NO];

これは私のために働いた。

1
garridozh

Swift

UITableViewControllerではないクラスでSwift 3を使用していて、UITableViewDelegateを使用している場合、メソッドタイトルを使用する必要がある場合があります。

@objc(tableView:didSelectRowAtIndexPath:) func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){...}

これはうまくいきましたが、プロジェクトをSwift 3に移行したばかりですが、かなり新しいため、後で修正することができます。

1
Adam Smith

私のために働いたのは、「didSelect ...」と入力し始め、残りを自動修正することでした。どうやら私の構文のいくつかの詳細は不安定でした。他の人が言ったように、IDEを使用してください!!

0
safari yellow

Swift

私の場合、他の答えはどれもうまくいきませんでしたが、私にとってそれを修正したのは:

tableView.delaysContentTouches = false

0
Diogo Martins

Swift 4.2

属性インスペクターで「遅延タッチダウン」を無効にすることで問題が解決しました。
その後、クリックはスムーズになり、すぐにdidSelectRowAtが起動します。

XCode attributes inspector

0
Aviv Mor

私の場合、ジェスチャー認識機能付きのUITableViewセクションヘッダーがありました。ヘッダーをタップすると、そのセクションにいくつかの行が挿入され、挿入がアニメーション化されます(セクションの展開/折りたたみなど)。初めて展開してタップしたとき、didSelectRowデリゲートメソッドは起動されませんでした。さらなるタップと展開/折りたたみアクションについては、期待どおりに機能していました。

@ Ayoub Nouri による回答ごとに、cancelsTouchesInViewをfalseに設定して、問題を解決しました。 tapGestureRecognizer?.cancelsTouchesInView = false

0
Kabeer

didSelectRowAt関数が1回目または2回目のタップでアプリで呼び出されませんでした...解決策を見つけることができなかった問題を解決しようとしていました。しかし、突然認識され、view.animationの色の変更を使用していました... Delegateメソッドは、アニメーションが持続している間は呼び出されませんでした

0
Beyaz