初心者です。見様見真似で自分の作りたいアプリを作成しています。
UIViewController表示されているTextFieldをタップした時にDatePickerを表示するカスタムクラス(PickerText)を作ったのですが、実行するViewController(ViewController)でそのカスタムクラスを実装する方法が分からないです。
クラスのインスタンスを生成することで、そのクラスのプロパティーやメソッドを使用することができ、また、クラスのイニシャライザは、そのクラスがインスタンス化した時に処理されると認知しております。以下がそのコードになりますが、ViewControllerでDatePickerを表示する様にするには、どの様に書けば良いのでしょうか。イニシャライザを書いてるので、インスタンス化した時点で画面に表示されると思っていましたが、表示されませんでした。長くなりましたが、ご教示お願いします。
PickerTextです。
Swift
1import Foundation 2import UIKit 3 4class PickerText: UITextField { 5 6 var datePicker: UIDatePicker! 7 8 required init?(coder: NSCoder) { 9 super.init(coder: coder) 10 commoninit() 11 } 12 override init(frame: CGRect) { 13 super.init(frame: frame) 14 commoninit() 15 } 16 17 func commoninit(){ 18 19 datePicker = UIDatePicker() 20 datePicker.date = Date() 21 datePicker.datePickerMode = .date 22 datePicker.locale = Locale(identifier: "ja") 23 datePicker.addTarget(self, action: #selector(setText), for: .valueChanged) 24 setText() 25 26 inputView = datePicker 27 inputAccessoryView = createToolbar() 28 29 } 30 31 32 func createToolbar() -> UIToolbar { 33 let toolbar = UIToolbar() 34 toolbar.frame = CGRect(x: 0, y: 0, width: self.frame.width, height: 44) 35 36 let space = UIBarButtonItem(barButtonSystemItem: .fixedSpace, target: self, action: nil) 37 space.width = 12 38 let flexSpaceItem = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: self, action: nil) 39 let todayButtonItem = UIBarButtonItem(title: "今日", style: .done, target: self, action: #selector(todayPicker)) 40 let doneButtonItem = UIBarButtonItem(title: "決定", style: .done, target: self, action: #selector(donePicker)) 41 42 let toolbarItems = [space, flexSpaceItem, todayButtonItem, doneButtonItem] 43 toolbar.setItems(toolbarItems, animated: true) 44 45 return toolbar 46 } 47 48 @objc func todayPicker() { 49 datePicker.date = Date() 50 setText() 51 } 52 53 @objc private func donePicker() { 54 resignFirstResponder() 55 } 56 57 @objc func setText(){ 58 let f = DateFormatter() 59 f.calendar = Calendar(identifier: .japanese) 60 f.dateStyle = .long 61 f.locale = Locale(identifier: "ja") 62 text = f.string(from: datePicker.date) 63 64 } 65 66 67 override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool { 68 return false 69 } 70 71 override func selectionRects(for range: UITextRange) -> [UITextSelectionRect] { 72 return [] 73 } 74 75 override func caretRect(for position: UITextPosition) -> CGRect { 76 return CGRect(x: 0, y: 0, width: 0, height:0) 77 } 78 79} 80
ViewControllerです。
Swift
1import UIKit 2 3class ViewController: UIViewController { 4 @IBOutlet weak var textField: UITextField! 5 6 override func viewDidLoad() { 7 super.viewDidLoad() 8 9 } 10 11 @IBAction func textTap(_ sender: Any) { 12 let tapText = PickerText() 13 //ここからどの様に書けば良いのか分かりません 14 } 15 16} 17
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/24 10:59 編集