[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] プロパティリスト(plist)を使ってCoreDataで一括登録する
プロパティリストを使う 初期データやあらかじめ用意したデータを一括登録したい場合、プロパティリスト
-
-
TabBarControllerとNavigationControllerのボタン追加
TabBarとNavigationを同時に使っているViewControllerの場合、naviga
-
-
[Objective-C] UINavigationControllerのセグエを使って画面遷移をする
画面遷移の実装 今回はUINavigationControllerを使って画面遷移をしたいと思いま
-
-
[Swift] Asset Catalogについて
XCode5から追加されたAsset Catalog。 いままで標準のImages.xcasset
-
-
[Objective-C] 共通関数をまとめたクラスを作ろう!
共通クラスとは? アプリを作っていると「この処理何回も書いてるなー」ということが多々あると思います
-
-
Xcode5のstoryboard内でUIKeyCommandエラーの対処法
既存のプロジェクトからstoryboardにあるオブジェクトをコピペして、新規プロジェクトに貼付けた
-
-
[Swift] スクリーンサイズを取得する
スクリーンサイズを取得 iPhoneの幅と高さを取得する関数を紹介します。 iOS8から画面の傾
-
-
[Objective-C] デリゲート (Delegate)を理解する!
デリゲートとは? デリゲートに関しての意味合いとして、”委譲”とか”代理”と説明されることが多いで
-
-
[iPhone App]WorkManager アップデートしました。
Processing For App Storeでやきもきした僕です。こんにちわ。 今
-
-
iPhoneApp WorkManager公開されました!
きっとリジェクトされるんだろうなと思いながら申請を出して1週間。 本日、公開のメールが届きまし
