357

に問題がありUITableView's didSelectRowAtIndexPathます。

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

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

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

助言がありますか?

4

16 に答える 16

1372

誤ってselectRowAtIndexPathを入力した可能性はありますか?

于 2010-01-21T02:17:06.767 に答える
24

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

于 2012-11-29T10:05:28.910 に答える
7

これが明らかになるために星が整列していると思うので、この回答を投稿することさえ議論しました。

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

于 2014-01-31T20:30:37.543 に答える
2

この問題は、tableView 内でジェスチャ レコグナイザーを使用している場合にも発生します。この場合、それらを削除する必要はありません。ジェスチャ プロパティを確認するだけで済みます。cancelsTouchesInView = falseこれはブール値であり、タッチがビューに配信されるかどうかに影響します。ジェスチャーが認識されます。

于 2018-07-09T15:45:32.287 に答える
1

スイフト3

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

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

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

于 2016-10-06T14:21:40.800 に答える
1

スイフト 2

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

self.tableView.allowsSelection = true

これをあなたの右の上に置いてくださいviewDidLoad()super.viewDidLoad()

于 2015-11-20T15:20:52.893 に答える