gpt4 book ai didi

swift - 关闭 UIAlertController UITextField 上的键盘

转载 作者:行者123 更新时间:2023-11-30 12:02:59 28 4
gpt4 key购买 nike

通常 view.endEditing(true) 总是在 iOS 上快速删除键盘。

然而,这并不总是正确的,就像当 UITextFieldself.present()'ed 模态 view 的一部分时,即UIAlertController

内的表单

示例

    let alert = UIAlertController(title: _title, message: "Choose", preferredStyle: .alert)

let numberLabel = UILabel(frame: CGRect(x:10, y:0, width:90, height:20))
numberLabel.textColor = .black
numberLabel.textAlignment = NSTextAlignment.left
numberLabel.font = UIFont(name: titleLabel.font.fontName, size: 16)
numberLabel.font = UIFont.boldSystemFont(ofSize: titleLabel.font.pointSize)
numberLabel.text = "Quantity"

let quantityField = UITextField(frame: CGRect(x:100, y:0, width:140, height:25))
quantityField.layer.borderWidth = 1
quantityField.keyboardType = .numberPad
quantityField.layer.borderColor = UIColor.lightGray.cgColor
quantityField.delegate = self
self.addDoneButtonOnKeyboard(textField: quantityField)
self.present(alert, animated: true, completion: nil)

现在在这个 self.addDoneButtonOnKeyboard 方法中我有这个漂亮的代码

func addDoneButtonOnKeyboard(textField: UITextField){
let doneToolbar: UIToolbar = UIToolbar(frame: CGRect(x:0, y:0, width:320, height:50))
doneToolbar.barStyle = UIBarStyle.default

let flexSpace = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.flexibleSpace, target: nil, action: nil)
let done: UIBarButtonItem = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.done, target: self, action: #selector(ViewControllerDisplay.doneButtonAction(_:)))

let items = NSMutableArray()
items.add(flexSpace)
items.add(done)

doneToolbar.items = items as? [UIBarButtonItem]
doneToolbar.sizeToFit()

textField.inputAccessoryView = doneToolbar
}

@objc func doneButtonAction(_ btn: UIBarButtonItem){
view.endEditing(true)
}

这一切的目的是为了出现“完成”键盘按钮。确实如此。事实上它看起来很棒,我还可以捕获 doneButtonAction() 事件,这很棒,但我只捕获 UIBarButtonItem 所以我不能使用 UITextField .resignFirstResponder() 方法,尽管我知道它会起作用。我必须使用“查看”

我想做的是调用 alert.endEditting(true) 但我尝试循环遍历 subview ,筛选任何出现 UIAlertController self.present 不能那样工作

任何人都可以帮我从警报 View 中清除此键盘吗?

最佳答案

我通过获取 topMost View Controller 并调用 endEditing(true) 来修复它,我认为这个问题应该保留下来,有一天对某人来说这是一个非常有用的花絮

@objc func doneButtonAction(_ btn: UIBarButtonItem){
if var topController = UIApplication.shared.keyWindow?.rootViewController {
while let presentedViewController = topController.presentedViewController {
topController = presentedViewController
}
topController.view.endEditing(true)
}
}

关于swift - 关闭 UIAlertController UITextField 上的键盘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46991595/

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