UIPickerView - 値を選択

f:id:oynop:20150228010136p:plain

説明

UIPickerViewはUIViewのサブクラス
ちなみに,UIDatePickerはUIPickerViewを利用している.
UIDatePickerについては

ソースコード

UIPickerViewSample.swift

import UIKit
class UIPickerViewSample: UIView, UIPickerViewDelegate, UIPickerViewDataSource {
    var data: [[String]] = [
    ["AAA", "SSS", "DDD", "FFF"],
    ["1", "2", "3"],
    ["A", "B", "D", "E", "F", "G"]]

    override init(frame: CGRect) {
        super.init(frame: frame)
        let pv = UIPickerView(frame: CGRectMake(0, 0, 200, 40))
        self.addSubview(pv)
        
        pv.center = self.center

        pv.delegate = self
        pv.dataSource = self

        // 初期値
        pv.selectRow(2, inComponent: 0, animated: true)
        pv.selectRow(1, inComponent: 1, animated: true)
        pv.selectRow(5, inComponent: 2, animated: true)
    }

    required init(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
        return data.count
    }    
    
    // データ数
    func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        return data[component].count
    }

    // セルをビューで表示
    func pickerView(pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusingView view: UIView!) -> UIView {
        let label = UILabel(frame: CGRectMake(0, 0, pickerView.frame.width/CGFloat(data.count), 44))
        label.textColor = colorPattern.main()
        label.text = data[component][row] as String
        label.textAlignment = NSTextAlignment.Center
        return label
    }
    /*
    // セルの値だけを表示 (デフォルトのデザイン)
    func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String {
        return data[component][row] as String
    }*/


    // 選択された時
    func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
        println("selected: \(row), \(data[component][row])")
    }
}

ViewController.swift

import UIKit
class ViewController: UIViewController {
    override func viewDidLoad() {       
        super.viewDidLoad()
        self.view.backgroundColor = colorPattern.back()
        self.view.addSubview(UIPickerViewSample(frame: self.view.frame))
    }
   
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}