iOS

UITableViewのタップが効かない場合の対処法

ちゃんとDelegateをセットしているのに、UITableViewのタップイベント

tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)

 

が発動しない場合、原因はきっと、UITableViewのisEditingを有効にしているせいです。

テーブルにデータの閲覧機能の他に、「削除機能も追加」しようと、isEditing=trueをセットすると、削除ボタンが表示されるようになりますが、タップイベントが効かなくなります。

「単純に削除だけ入れたい」場合はisEditingはfalseにし、次のデリゲートメソッドでdeleteを返せば、横スワイプでの削除が有効になり、タップも使えるので便利です。

func tableView(_ tableView: UITableView, editingStyleForRowAt indexPath: IndexPath) -> UITableViewCell.EditingStyle {
    return .delete
}

 

isEditing=trueのまま、タップもしたい場合

並べ替えも追加したい、もしくは、どうしても削除ボタンを表示しておきたい場合は、cellに対してUITapGestureRecognizerを追加することで、isEditing=trueのままタップイベントをハンドリングできるようになります。

let tapGesture = UITapGestureRecognizer(target: self, action: #selector(onTap))
cell.contentView.addGestureRecognizer(tapGesture)