Swiftで遊ぼう!の古い記事-> Life-LOG OtherSide
質問 : Swiftで遊ぼう! - 252 - FaceViewプロジェクト始動 - Swiftで遊ぼう! on Hatena

Beginning iPhone Development with Swift: Exploring the iOS SDK

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に表示させるためにデリゲーションを使います。

yataiblue.hatenablog.com

こういうジェネリックな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オブジェクトを選択して、コネクション・インスペクタを開いて下さい。

f:id:yataiblue:20150520154521j:plain

変数「dataSource」と「delegate」とが並んでいます。どちらもまだ繋がっていないので右横に白丸があります。最初の方法は、この白丸をドラッグしてストーリーボード上のビューコントローラー上部のビューコントローラーアイコンでリリースさせるか、Document Outline上のViewControllerでリリースさせるだけで繋がります。

もう1つの方法は、PickerViewオブジェクトをそのまま「Ctrl + ドラッグ」して上部のViewControllerでリリースするとポップアップメニューがでてきます。

f:id:yataiblue:20150520155444j:plain

Shiftキーを押しながら選択すると同じように設定できます。

このようにXcode上では数々のバリエーションが用意されているので慣れる必要性があります。

今日はここまで。

*1:「Swiftで遊ぼう! - 260 - プロトコールとデリゲーション ProtocolsとDelegation」で説明している6つのステップです。