LoginSignup
3
3

More than 5 years have passed since last update.

Eureka の List Sections の使い方

Last updated at Posted at 2017-04-21

設定画面などを作成する際に便利なライブラリ 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回呼ばれること

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3