設定画面などを作成する際に便利なライブラリ Eureka ですが、List Sections の使い方が公式ドキュメントやサンプルではわかりにくかったので、共有します。
import UIKit
import Eureka
class MyFormViewController: FormViewController {
// 初期値
var selectedFruits = "バナナ"
override func viewDidLoad() {
super.viewDidLoad()
// Single Selection の List Section を作成
form +++ SelectableSection<ListCheckRow<String>>("好きなフルーツ", selectionType: .singleSelection(enableDeselection: true))
let fruitsList = ["りんご", "バナナ", "みかん"]
for fruits in fruitsList {
form.last! <<< ListCheckRow<String>(fruits){ listRow in
listRow.title = fruits
listRow.selectableValue = fruits
// 選択状態にしたい項目にのみ value をセットする
if selectedFruits == fruits {
listRow.value = fruits
} else {
listRow.value = nil
}
}
}
}
//
// 選択が変更された時の処理
// 2回呼ばれる。
// 1回目: oldValue = some , newValue = nil
// 2回目: oldValue = nil , newValue = some
//
override func valueHasBeenChanged(for row: BaseRow, oldValue: Any?, newValue: Any?) {
if newValue != nil {
if row.section === form[0] {
switch (row.section as! SelectableSection<ListCheckRow<String>>).selectedRow()?.baseValue as! String {
case "りんご":
// りんごが選択されました
case "バナナ":
// バナナが選択されました
case "みかん":
// みかんが選択されました
default:
// その他・・・
}
}
}
}
}
ポイントは以下ですね。
・選択状態にしたい項目にのみ value を設定する
・変更された際に値を得るには valueHasBeenChanged を実装する必要があること
・valueHasBeenChanged が2回呼ばれること