swift3.x
[swift3.0系]UITableViewの特定(指定)のcell(セル)のタップ動作をコードで無効にする方法
[環境]
Xcode:8.2.1
Swift:3.0.2
iOS:10.2
tableViewの指定した特定のセルを選択(ハイライト)させない方法の紹介はよく見かけますので、
今回はtableViewの指定した特定のセルのタップ動作自体を無効にする方法の紹介です。
タップ動作を無効にするということは、例えば、セルをタップしたら別画面に遷移するとか、
Labelに表示するテキストを変えるとか、そういった挙動を制御することができます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
class TestViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { // ストーリーボードでtableViewを設定している場合はoutlet接続してください。 @IBOutlet weak var testTableView: UITableView! // セルに表示する値 var testList = ["Test01", "Test02", "Test03", "Test04", "Test05"] 〜省略〜 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { // セルを取得 let cell = tableView.dequeueReusableCell(withIdentifier: "ご自身で定義したIdentifierを入れてね", for: indexPath as IndexPath) // セルに表示する値を設定(一応書いときますね) cell.textLabel!.font = UIFont.systemFont(ofSize: 18) cell.textLabel!.text = self.testList[indexPath.row] // "Test05"のセルのタップ動作を無効にする場合 if (self.testList[indexPath.row] == "Test05") { cell.isUserInteractionEnabled = false } return cell } 〜省略〜 |
こんな感じで、指定した特定のセルのタップ動作自体を無効にできます。
(これはストーリーボードから設定することも可能です。)
AUTHOR kei
Posted on 18:34 2017-09-22.
とても参考になりました。
それとなんですが例えばvar testList = [“Test01”]の時に後からcellが追加されたcellをタップさせたくない場合はどうしたらいいですか?
AUTHOR kei
Posted on 22:29 2017-09-22.
先ほどコメントさせていただものですが質問した内容に関して、自分でなんとか解決出来ました。しかし、cell.isUserInteractionEnabled = falseによってcellをスワイプして削除ができなくなったのですがスワイプ削除だけ可能にしたりすることは出来ないのでしょうか?お忙しと思いますがもし良ければ教えて頂けたら嬉しいです。宜しくお願い致します。
AUTHOR 菅藤 亮兵 (Ryohei Kanto)
Posted on 15:40 2017-11-29.
コメントしていただいていることに気付かず、返信が遅くなってしまいました。すみません。。
ご質問の件ですが、既に解決済みかもしれませんが、僕の環境ではタップ動作を無効にしても、スワイプによるセル削除はできることは確認しているので、大丈夫だと思いますよー。