[Swift] UITableViewのセルにアクションを設定する
公開日:
:
iPhone App 開発, Swift
Warning: Use of undefined constant user_level - assumed 'user_level' (this will throw an Error in a future version of PHP) in /home/users/1/juny/web/hidef/wp-content/plugins/ultimate-google-analytics/ultimate_ga.php on line 524
セル選択→アクション
UITableViewControllerを使用したテーブルビューの画面があるとします。
そしてUITableViewのセルを選択したときにアクションを実行させるのですが、スマートな方法を見つけたので紹介します。
言語はSwiftになります。
処理の流れは。。。
- セル列に個別のアクション(メソッド)を用意する
- アクションマップ(配列)を設定する
- セル選択時にアクションマップからアクションを実行させる
ソースファイルはTableViewActionController.swiftで作成しました。
以下、ソースコードです。
import UIKit class TableViewActionController : UITableViewController { var actionMap: [[Void -> Void]] { return [ // Section1 [ self.cell1_1, self.cell1_2, self.cell1_3 ], // Section2 [ self.cell2_1, self.cell2_2 ] ] } func cell1_1() { println("cell1_1"); } func cell1_2() { println("cell1_2"); } func cell1_3() { println("cell1_3"); } func cell2_1() { println("cell2_1"); } func cell2_2() { println("cell2_2"); } // MARK: UITableViewDelegate override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { let action = actionMap[indexPath.section][indexPath.row] action() tableView.deselectRowAtIndexPath(indexPath, animated: true) } }
- 5行目:actionMap変数で定義したメソッドを設定しています。
- 21〜39行目:各セル選択時に実行されるメソッドです。
- 43行目:UITableViewのDelegateメソッドであるdidSelectRowAtIndexPath(セル選択時に呼ばれる)にactionMap変数の配列に指定されたアクションを実行します。
- 48行目:deselectRowAtIndexPathで選択状態のセルを解除します。
まとめ
普通ならdidSelectRowAtIndexPathでif文を使い[セクション・列]を判断しメソッドを実行させるのですが、アクションをまとめるやり方は、とてもスマートに記述できたのが分かります。配列にメソッドを設定しているのがキモですね。
Objective-cではこんな設定できるのかわかりませんが、Swift素晴らしい!と思いました。
ad
関連記事
-
[Swift] UITabBarControllerでタブ選択時のイベントを取得する
UITabBarController タブを使った画面を作成する場合はUITabBarContro
-
OSSの使い方がわからない・・・。
チュートリアル系の、storyboradでview controllerを置いて画面遷移を設定してっ
-
[Objective-C] 共通関数をまとめたクラスを作ろう!
共通クラスとは? アプリを作っていると「この処理何回も書いてるなー」ということが多々あると思います
-
[Swift] CoreDataのテーブルからデータ件数を取得する
件数を取得する fetchResultsControllerなどを使わず、直接テーブルのデータ件数
-
[Objective-C] 文字列操作の便利Tips
Tipsいろいろ 先日の投稿 共通関数をまとめたクラスを作ろう!の流れで、文字列を操作するときに便
-
[Swift] 定数クラスをつくってみる
Objective-cの場合 今回は共通にする定数をまとめるクラスを作ってみます。 まずはO
-
[Objective-C] バージョン更新時に変更内容をアラートで出力する
アプリの更新内容を表示したい! バージョン更新時に変更内容を表示させたいのは、ユーザーがいちいちA
-
[Swift] Swiftでいろんなfor文まとめてみた
いろんなfor文 プログラム作成で必ず出てくるfor文を自分なりにまとめてみました。 Swift