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