[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
関連記事
-
-
TabBarControllerとNavigationControllerのボタン追加
TabBarとNavigationを同時に使っているViewControllerの場合、naviga
-
-
[Swift] UITabBarControllerでタブ選択時のイベントを取得する
UITabBarController タブを使った画面を作成する場合はUITabBarContro
-
-
Xcode5のstoryboard内でUIKeyCommandエラーの対処法
既存のプロジェクトからstoryboardにあるオブジェクトをコピペして、新規プロジェクトに貼付けた
-
-
[Swift] CoreDataを使ってみる
SwiftでCoreData 今回はSwiftでCoreDataを使ってみます。 Xcodeプロ
-
-
NSDateを5分刻み・15分刻みで丸める
NsDateを初期値としてUIDatePicker等に設定する場合、日付の丸め処理が必要になるのでメ
-
-
[Swift] CoreDataで検索したデータを削除する
CoreDataの検索と削除 前の投稿 CoreDataを使ってみる をふまえて今度は検索&削除
-
-
[Swift] ビルド時のエラー&iOS8でNSBigDecimalのバグ
ビルド時のエラー Swiftプロジェクトを実行中に以下のエラーが出ました。 "__TFSs15_
-
-
[Swift] 関数型プログラミング
関数型プログラミングについて、ストーリー仕立ての面白い記事がありましたので紹介します。 IQ1
-
-
[Objective-C] 小数点を丸める!(数値変換)
小数点を含む数値 Objective-Cに限らず、小数点を含む数値を計算する場合はdoubleやf
-
-
iPhoneApp WorkManager公開されました!
きっとリジェクトされるんだろうなと思いながら申請を出して1週間。 本日、公開のメールが届きまし
