gpt4 book ai didi

ios - 对同一个 UITextField 使用两个输入 View

转载 作者:行者123 更新时间:2023-11-28 15:51:39 25 4
gpt4 key购买 nike

我有一个 UITextField,它可以使用数据选择器和数字键盘输入日期,当用户直接点击 UITextField 时,数字键盘应该打开,但是当用户点击 UIButton 时,DatePicker 应该打开。

我的代码:

userInfo.addTarget(self, action: #selector(textFieldEditing), for: .editingDidBegin)
func textFieldEditing(sender: UITextField) {
sender.inputView = nil
sender.inputAccessoryView = nil
sender.reloadInputViews()
}
func pickUpDate(){

// DatePicker
datePicker = UIDatePicker()
datePicker.backgroundColor = UIColor.white
datePicker.setValue(Constants.Colors.AppGreen, forKey: "textColor")
datePicker.datePickerMode = UIDatePickerMode.date
datePicker.addTarget(self, action: #selector(datePickerValueChanged), for: UIControlEvents.valueChanged)

let gregorian: NSCalendar = NSCalendar(calendarIdentifier: NSCalendar.Identifier.gregorian)!
let currentDate: Date = Date()
let components: NSDateComponents = NSDateComponents()


if txtFDOB.textFieldType == UserBasicDetailCellType.UserBasicDetailCellDOBType {
components.year = -18
let minDate: Date = gregorian.date(byAdding: components as DateComponents, to: currentDate as Date, options: NSCalendar.Options(rawValue: 0))!

components.year = -150
let maxDate: Date = gregorian.date(byAdding: components as DateComponents, to: currentDate as Date, options: NSCalendar.Options(rawValue: 0))!
datePicker.maximumDate = minDate
datePicker.minimumDate = maxDate

datePicker.date = minDate
}
if txtFDOB.textFieldType == UserBasicDetailCellType.UserBasicDetailCellNomineeDOBType {
components.year = -18
let minDate: Date = gregorian.date(byAdding: components as DateComponents, to: currentDate as Date, options: NSCalendar.Options(rawValue: 0))!
datePicker.minimumDate = minDate
datePicker.maximumDate = currentDate
}

// ToolBar
let toolBar = UIToolbar()
toolBar.barStyle = .default
toolBar.isTranslucent = true
toolBar.tintColor = Constants.Colors.DarkGrey
toolBar.sizeToFit()

// Adding Button ToolBar
let doneButton = UIBarButtonItem(title: "Done", style: .plain, target: self, action: #selector(KycFormViewController.doneClick))
doneButton.setTitleTextAttributes([NSFontAttributeName : UIFont.systemFont(ofSize: 18.0),NSForegroundColorAttributeName : Constants.Colors.AppGreen,NSBackgroundColorAttributeName:Constants.Colors.LightGrey],for: UIControlState.normal)

let spaceButton = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
let cancelButton = UIBarButtonItem(title: "Cancel", style: .plain, target: self, action: #selector(KycFormViewController.cancelClick))
cancelButton.setTitleTextAttributes([NSFontAttributeName : UIFont.systemFont(ofSize: 18.0),NSForegroundColorAttributeName : Constants.Colors.AppGreen,NSBackgroundColorAttributeName:UIColor.black],
for: UIControlState.normal)
toolBar.setItems([cancelButton, spaceButton, doneButton], animated: false)
toolBar.isUserInteractionEnabled = true


txtFDOB.resignFirstResponder()
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
self.txtFDOB.inputAccessoryView = toolBar
self.txtFDOB.inputView = self.datePicker
self.txtFDOB.becomeFirstResponder()
}
}

现在,当我 resignFirstResponder() 并再次使 FirstResponder 调用 textFieldEditing 并将 InputViews 设置为 nil 时。

实现相同的任何其他方式。

提前致谢

最佳答案

喜欢

第一步

删除方法 func pickUpDate() 中的以下代码

txtFDOB.resignFirstResponder()
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
self.txtFDOB.inputAccessoryView = toolBar
self.txtFDOB.inputView = self.datePicker
self.txtFDOB.becomeFirstResponder()
}

第二步

call/Move your `func pickUpDate()` to `viewdidload` 

第三步

你的文本字段 func textFieldEditing(sender: UITextField) 是正确的,就像你的按钮一样,就像这样

 func datePickerClicked(sender: UIButton!) { 
txtFDOB.resignFirstResponder()
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
self.txtFDOB.inputAccessoryView = toolBar
self.txtFDOB.inputView = self.datePicker
self.txtFDOB.becomeFirstResponder()
}
}

关于ios - 对同一个 UITextField 使用两个输入 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42220548/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com