Swift3 Pickerの実装

まず接続
TextFieldを扱う専用のクラスを作成

@IBOutlet weak var uiBirthday: MsDateTextField!

呼び出し

uiBirthday.date = datPerson?.birthday as Date?

プロパティオブザーバー

プロパティオブザーバー とは、ストアドプロパティの値を変更を監視し、変更前と変更後に文を実行するもの ここではdidSetなので、プロパティの変更後に実行する処理を記載。

  /// TextField I/O(注意.setFormatが実行されている事)
    public var date: Date? {
        didSet {
            text = date == nil ? "" : dateFormatter.string(from: date!)
            onResetDate?()
        }
    }

text = date == nil ? "" : dateFormatter.string(from: date!) は3項演算子
textにはdateをいれてもしそれがnilなら””(空白)をいれてそうでないなら、dateFormatter.string(from: date!)を入れましょうね。

class MsDateTextField: UITextField, UITextFieldDelegate {
~~
    /// date のTextFieldとピッカーでの表現形式を設定する
    public func setFormat(_ forText: DateFormatter, forPicker: UIDatePickerMode) {
        
        self.delegate = self
        dateFormatter = forText
        
        // 左から右にピッカー ツールバーのボタンを順に作成
        var barItems = [UIBarButtonItem]()
        let spaceButton = UIBarButtonItem(
            barButtonSystemItem: UIBarButtonSystemItem.flexibleSpace,
            target: nil, action:nil)
        barItems.append(
            UIBarButtonItem(
                barButtonSystemItem: UIBarButtonSystemItem.cancel,
                target: self, action: #selector(PickerTextField.cancel))
        )
        barItems.append(spaceButton)
        barItems.append(
            UIBarButtonItem(
                barButtonSystemItem: UIBarButtonSystemItem.done,
                target: self, action: #selector(PickerTextField.done))
        )
        let toolbar = UIToolbar(frame: CGRect(x: 0, y: 0, width: 10, height: toolBarHeight))
        toolbar.setItems(barItems, animated: true)
        
        let datePicker = UIDatePicker()
        datePicker.datePickerMode = forPicker

        self.inputView = datePicker
        self.inputAccessoryView = toolbar
        uiDatePicker = datePicker
    }
    //.

f:id:happy_teeth_ago:20180708224521p:plain

var barItems = UIBarButtonItemは上部のバーに表示するcancel ,doneを生成している。   そしてtoolbarを生成し、中に詰め込む  

 let toolbar = UIToolbar(frame: CGRect(x: 0, y: 0, width: 10, height: toolBarHeight))
        toolbar.setItems(barItems, animated: true)
  let datePicker = UIDatePicker()
        datePicker.datePickerMode = forPicker

        self.inputView = datePicker
        self.inputAccessoryView = toolbar
        uiDatePicker = datePicker

let datePicker = UIDatePicker()

でピッカーを生成 datePicker.datePickerMode = forPicker datePickerModeはデフォルトで日付と時間を表示する
forPickerは引数で持ってきた値
uiDatePickerは

private weak var uiDatePicker: UIDatePicker!

このクラスのインスタンス

ここから明日へ続く。。。

DateFormatterとは

つまりDateFormatterでいろんな表現をして、NSDateオブジェクトを作成するということ

UIDatePickerModeとはUIDatePickerクラス(ピッカーを実装する本体のクラス)の列挙体、名前つけているだけですね。

このモードでは、日付、時刻、または両方の日付と時刻が表示されるかどうかが決まります。また、それを使用してカウントダウンタイマーの外観を指定することもできます。 これで外観を決める つまり外観を整えるには、

public enum UIDatePickerMode : Int {

    
    case time // Displays hour, minute, and optionally AM/PM designation depending on the locale setting (e.g. 6 | 53 | PM)

    case date // Displays month, day, and year depending on the locale setting (e.g. November | 15 | 2007)

    case dateAndTime // Displays date, hour, minute, and optionally AM/PM designation depending on the locale setting (e.g. Wed Nov 15 | 6 | 53 | PM)

    case countDownTimer // Displays hour and minute (e.g. 1 | 53)
}

ちょっと大変なことになるので、書き方改めます。 まず外観を俯瞰して、それから詳細を記載するように努めます。 今しばらくお待ち下さい。