- 更新日: 2015年7月9日
- Swift & iOS
UITableViewの特定のセルのみUser Interactionを無効にする
ViewController 内に設置した UITableView で、特定のセルのみ User Interaction を無効にしたかった。User Interaction とは、ユーザーがセルをタップして選択したり次の画面に遷移したりなど、ユーザーの動作をトリガーにしてアプリが何かしらアクションを行う機能です。Storyboard で UITableView を使いますと、デフォルトでこの User Interaction が有効になっています。
— 環境 —
Xcode 6.3.2
Swift 1.2
UITableView に UITableViewCell を配置
まず各々のセルを識別するために、カスタマイズ用の UITableViewCell を UITableView の中に配置しました。以下画像のようにセル(UITableViewCell)を7個置いてみた。
それぞれのセルの Attributes Inspector の Identifier に、ユニークな値(FirstCell, SecondCell, ThirdCell … など)を設定しておきます。これで、それぞれのセルを識別できる。
任意のセルを選択後、User Interaction Enabled のチェックを外す
Storyboard 上で User Interaction を無効にさせたいセルを選択した状態で、Attributes Inspector から「User Interaction Enabled」のチェックを外します。
目的のセルを選択した状態にしておくことがポイント。UITableView を選択した状態で、User Interaction Enabled のチェックを外すと、UITableView 全体、すなわち全てのセルで User Interaction が無効になってしまいます。
indexPath.row を switch case で判定して cell を返す
割り当てる Swift クラスのファイルのコードは以下のような感じ。
SettingViewController
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 |
import UIKit class SettingViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { @IBOutlet weak var tableView: UITableView! override func viewDidLoad() { super.viewDidLoad() } // ... func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { if indexPath.section == 0 { switch indexPath.row { case 0: let cell = tableView.dequeueReusableCellWithIdentifier("FirstCell") as! UITableViewCell return cell case 1: let cell = tableView.dequeueReusableCellWithIdentifier("SecondCell") as! UITableViewCell return cell case 2: let cell = tableView.dequeueReusableCellWithIdentifier("ThirdCell") as! UITableViewCell return cell // ... |
以上で、例えば Storyboard で上から3番目(ThirdCell)の User Interaction Enabled のチェックを外していたら、その ThirdCell のセルだけ User Interaction を無効にできます。一応目的通り動作はしましたが、もっと良い簡単な方法がありそうな気もします…。
- Swift & iOS の関連記事
- WKWebView/UIWebViewでウェブページが真っ白
- Unityのインストールと初期設定
- WKWebView/UIWebViewでNavigation Barの下にウェブページが隠れるのを回避
- SwiftでArray(配列)などをシャッフル
- Navigation Controllerで画面遷移させるSwiftコード
- Swiftでタップ/スワイプのイベント処理実装・UITapGestureRecognizerとUISwipeGestureRecognizer
- UIPageViewController画面下部のUIPageControlを非表示にする
- Swiftのバージョン確認・REPL実行
- Xcode7.0アップデートで遭遇した課題2つ
- 正規のXcodeかどうかチェック(XcodeGhostマルウェア騒動)
Leave Your Message!