次のカスタムクラスを書き、実行しましたが、nilが見つかりました。formatterのところでNULLとなっていますが、この場合どの様に対処すれば良いのでしょうか?
setText関数でtextに代入してます。setToday関数では、DatePickerを今日の日付に合わせようとしています。
swift
1 2import Foundation 3import UIKit 4 5class DatePickerText: UITextField { 6 7 var datePicker: UIDatePicker! 8 9 override init(frame: CGRect) { 10 super.init(frame: frame) 11 commominit() 12 } 13 14 required init?(coder aDecoder: NSCoder) { 15 super.init(coder: aDecoder) 16 commominit() 17 } 18 19 func commominit(){ 20 let datePicker = UIDatePicker() 21 datePicker.date = Date() 22 datePicker.datePickerMode = .date 23 print("これは誕生日です") 24 datePicker.locale = Locale(identifier: "ja") 25 datePicker.addTarget(self, action: #selector(setText), for: .valueChanged) 26 27 28 inputView = datePicker 29 inputAccessoryView = customPicker() 30 } 31 32 @objc func setText(){ 33 let f = DateFormatter() 34 f.dateStyle = .long 35 f.locale = Locale(identifier: "ja") 36 text = "(f.string(from: datePicker.date))" 37 38 } 39 40 41 private func customPicker() -> UIToolbar { 42 let toolbar = UIToolbar() 43 toolbar.frame = CGRect(x: 0, y: 0, width: self.frame.size.width, height: 35) 44 let space = UIBarButtonItem(barButtonSystemItem: .fixedSpace, target: self, action: nil) 45 space.width = 20 46 let flexSpaceItem = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: self, action: nil) 47 let todayButtonItem = UIBarButtonItem(title: "リセット", style: .done, target: self, action: #selector(setToday)) 48 let defineButtonItem = UIBarButtonItem(title: "決定", style: .done, target: self, action: #selector(defineDate)) 49 50 let toolBarItem = [space, flexSpaceItem, todayButtonItem, defineButtonItem] 51 toolbar.setItems(toolBarItem, animated: true) 52 53 return toolbar 54 } 55 56 @objc private func setToday(_ sender: UIBarButtonItem){ 57 datePicker.date = Date() 58 setText() 59 } 60 61 @objc private func defineDate(_ sender: UIBarButtonItem){ 62 resignFirstResponder() 63 } 64 65 override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool { 66 return false 67 } 68 69 override func selectionRects(for range: UITextRange) -> [UITextSelectionRect] { 70 return [] 71 } 72 73 override func caretRect(for position: UITextPosition) -> CGRect { 74 return CGRect(x: 0, y: 0, width: 0, height: 0) 75 } 76 77 78} 79

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/27 13:16
2020/04/27 13:25