[Swift] UITableViewのセルにアクションを設定する
公開日:
:
iPhone App 開発, Swift
セル選択→アクション
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
関連記事
-
-
Xcode5のstoryboard内でUIKeyCommandエラーの対処法
既存のプロジェクトからstoryboardにあるオブジェクトをコピペして、新規プロジェクトに貼付けた
-
-
[Swift] 関数型プログラミング
関数型プログラミングについて、ストーリー仕立ての面白い記事がありましたので紹介します。 IQ1
-
-
App開発をはじめてみました。
はじめてみたはいいものの、右も左もわからず、書籍を読みあさり、ネットを徘徊し、いろんなことを調べ上げ
-
-
[Objective-C] UINavigationControllerのセグエを使って画面遷移をする
画面遷移の実装 今回はUINavigationControllerを使って画面遷移をしたいと思いま
-
-
小さなことからコツコツと
これまでHTMLとCSSだけで生きてきただけあって、プログラム言語がいまいちわからない。 Mo
-
-
[Swift] Asset Catalogについて
XCode5から追加されたAsset Catalog。 いままで標準のImages.xcasset
-
-
NSDateを5分刻み・15分刻みで丸める
NsDateを初期値としてUIDatePicker等に設定する場合、日付の丸め処理が必要になるのでメ
-
-
TabBarControllerとNavigationControllerのボタン追加
TabBarとNavigationを同時に使っているViewControllerの場合、naviga