textPield를 업데이트하는 datePicker가 있습니다. textField 데이터 변경이 작업 (예 : 데이터 확인)을 수행해야합니다. 문제는 datePicker가 textField를 업데이트 한 후 textField가 textField에서 사용하고있는 어떤 이벤트 (예 : .ValueChanged.I)가 문제인지 파악할 수 없더라도 textField가 어떤 작업도 수행하지 않는다는 것입니다. textField에 뭔가를 입력하면 액션 이벤트가 작동한다는 것을 알았습니다.UITextPield가 UIDatePicker 액션 이벤트시 동작 이벤트를 발생시키지 않습니다.
class CustomTextField: UITextField, UITextFieldDelegate {
var customDelegate : CustomTextFieldDelegate?
enum type {
case standard
case date
}
var textFieldType : type = .standard {
didSet{
switch self.textFieldType {
case .standard:
break
case .date:
let datePicker = UIDatePicker.MMMddyyyy
self.inputView = datePicker
datePicker.addTarget(self, action: #selector(refreshOnDatePicker(_:)), for: .valueChanged)
self.addTarget(self, action: #selector(checkFieldInput), for: .applicationReserved)
break
}
}
}
@objc private func checkFieldInput(sender: CustomTextField){
guard let fieldInput = self.text else { return }
switch sender.textFieldType {
case .standard:
break
case .date:
customDelegate?.isTextFieldVerified = !fieldInput.isEmpty
break
}
}
@objc private func refreshOnDatePicker(_ selector: UIDatePicker){
self.text = selector.date.formattedMMMMddyyyy
}
}
fileprivate extension UIDatePicker {
class var MMMddyyyy : UIDatePicker {
let currentDate: NSDate = NSDate()
let calendar: NSCalendar = NSCalendar(calendarIdentifier: NSCalendar.Identifier.gregorian)!
calendar.timeZone = NSTimeZone(name: "UTC")! as TimeZone
let components: NSDateComponents = NSDateComponents()
components.calendar = calendar as Calendar
components.year = -100
let minDate: NSDate = calendar.date(byAdding: components as DateComponents, to: currentDate as Date, options: NSCalendar.Options(rawValue: 0))! as NSDate
let dp = UIDatePicker()
dp.datePickerMode = .date
dp.minimumDate = minDate as Date
dp.maximumDate = currentDate as Date
dp.backgroundColor = UIColor.white
return dp
}
}
fileprivate extension Date {
/// date formatted type "MMMM dd, yyyy"
var formattedMMMMddyyyy: String {
let formatter = DateFormatter()
formatter.dateFormat = "MMMM dd, yyyy"
return formatter.string(from: self)
}
}
내가 무엇을 달성하려고하는 것은에 textField입니다보십시오 : 다음은 내 코드입니다. 날짜를 선택하면 textField가 항목을 업데이트하고 유효성을 검사해야합니다. –
데이터베이스 항목을 유효화 할 수 있었으므로 self.checkFieldInput (보낸 사람 : 자체)을 추가하고 self.addTarget (셀프, 작업 : #selector (checkFieldInput))을 삭제했습니다 : .editingChanged) –