Swiftで遊ぼう! - 318 - My Picker Project : SingleComponentPicker Xcodeでデリゲーション
Swiftで遊ぼう!の古い記事-> Life-LOG OtherSide
質問 : Swiftで遊ぼう! - 252 - FaceViewプロジェクト始動 - Swiftで遊ぼう! on Hatena
Beginning iPhone Development with Swift: Exploring the iOS SDK
- 作者: David Mark,Jack Nutting,Kim Topley,Fredrik Olsson,Jeff LaMarche
- 出版社/メーカー: Apress
- 発売日: 2014/11/19
- メディア: Kindle版
- この商品を含むブログを見る
PickerViewの取り扱いを学んでいきます。
PickerViewは、DatePickerと異なり選択項目のデータを持たないジェネリックな存在なので、内容を表示するためにデリゲート(委任)が必要です。
このプログラムは、デモなので、データをSingleComponentPickerViewControllerに持たせます。普通はプロパティ・リストという形でデータを保持するのが一般的なようですが、主題から外れるので説明しません。
DatePickerと同様にPicker ViewとButtonをオブジェクト・ライブラリからドラッグ&ドロップしてコンストレイントを設定します。さらに「Ctrl + ドラッグ」してSingleComponentPickerViewControllerのコード内に繋げます。
@IBOutlet weak var singlePicker: UIPickerView!
@IBAction func buttonPressed(sender: AnyObject) { }
そして、表示データとして、ビューコントローラー内に次のアレーを加えます。
private let characterNames: NSArray = ["ルーク", "レイア", "ハン", "チューバッカ", "R2", "C-3PO", "ランド"]
このビューコントローラー内のcharacterNamesをジェネリックなPickerViewに表示させるためにデリゲーションを使います。
こういうジェネリックなUIPickerViewクラスは既にステップ1*1のプロトコールが用意されています。
UIPickerViewDataSource
UIPickerViewDelegate
そして、ステップ2の変数、delegateとdataSource、そしてステップ3のメソッドも用意されていますが、3つのメソッドを実装しないとプロトコールエラーは生じます。
ということでステップ4,5、6をコードする必要があります。
ステップ4
class SingleComponentPickerViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {
デリゲート先のクラスにプロトコールを準拠させる方法はスーパークラスの後に「,」をつけて繋げるだけです。赤丸のエラー表示が出ますが、メソッドが実装されると消えます。
ステップ5
変数delegateやdataSourceに、自分自身を設定します。こうすることでジェネリックなPickerViewがビューコントローラーを変数として扱えるようになるので、プロトコールで実装したメソッドを使ってビューコントローラーの値にアクセスします。
今までは、viewDidLoad()メソッド内にコードで書いていました。
override func viewDidLoad() { super.viewDidLoad() singlePicker.delegate = self singlePicker.dataSource = self }
今回はXcodeで設定していきます。非常に簡単なので慣れるとコードを書かなくなるかもしれません。
まず 「singlePicker.delegate = self」と「singlePicker.dataSource = self」を消します。
次にストーリーボード上のPickerViewオブジェクトを選択して、コネクション・インスペクタを開いて下さい。
変数「dataSource」と「delegate」とが並んでいます。どちらもまだ繋がっていないので右横に白丸があります。最初の方法は、この白丸をドラッグしてストーリーボード上のビューコントローラー上部のビューコントローラーアイコンでリリースさせるか、Document Outline上のViewControllerでリリースさせるだけで繋がります。
もう1つの方法は、PickerViewオブジェクトをそのまま「Ctrl + ドラッグ」して上部のViewControllerでリリースするとポップアップメニューがでてきます。
Shiftキーを押しながら選択すると同じように設定できます。
このようにXcode上では数々のバリエーションが用意されているので慣れる必要性があります。
今日はここまで。
*1:「Swiftで遊ぼう! - 260 - プロトコールとデリゲーション ProtocolsとDelegation」で説明している6つのステップです。