以下のコードをカスタムクラスに書いて、InterFaceBuilderでtextFieldのCustom Classにそのクラス名(PickerText)を指定してシュミレータを起動しました。決定ボタン(UIBarButtonItem)を押したところ、unrecognized selector sent to instance 0x7fe24e407e10というエラーが出ました。Custom Class名や#selecterを確認しましたが合っている様です。この解決方法をご教授ください。
Swift
import Foundation import UIKit class PickerText: UITextField { var datePicker: UIDatePicker! required init?(coder: NSCoder) { super.init(coder: coder) commoninit() } override init(frame: CGRect) { super.init(frame: frame) commoninit() } func commoninit(){ datePicker = UIDatePicker() datePicker.date = Date() datePicker.datePickerMode = .date datePicker.locale = Locale(identifier: "ja") datePicker.addTarget(self, action: #selector(setText), for: .valueChanged) setText() inputView = datePicker inputAccessoryView = createToolbar() } func createToolbar() -> UIToolbar { let toolbar = UIToolbar() toolbar.frame = CGRect(x: 0, y: 0, width: self.frame.width, height: 44) let space = UIBarButtonItem(barButtonSystemItem: .fixedSpace, target: self, action: nil) space.width = 12 let flexSpaceItem = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: self, action: nil) let todayButtonItem = UIBarButtonItem(title: "今日", style: .done, target: self, action: #selector(todayPicker)) let doneButtonItem = UIBarButtonItem(title: "決定", style: .done, target: self, action: #selector(donePicker)) let toolbarItems = [space, flexSpaceItem, todayButtonItem, doneButtonItem] toolbar.setItems(toolbarItems, animated: true) return toolbar } @objc func todayPicker() { datePicker.date = Date() setText() } @objc private func donePicker() { setText() self.endEditing(true) } @objc func setText(){ let f = DateFormatter() f.calendar = Calendar(identifier: .japanese) f.dateStyle = .long f.locale = Locale(identifier: "ja") text = f.string(from: datePicker.date) } override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool { return false } override func selectionRects(for range: UITextRange) -> [UITextSelectionRect] { return [] } override func caretRect(for position: UITextPosition) -> CGRect { return CGRect(x: 0, y: 0, width: 0, height:0) } }
まだ回答がついていません
会員登録して回答してみよう