作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一个名为 titleTextField
的 UITextField
和一个名为 save
的 UIBarButtonItem
我在 viewDidload()
titleTextField .delegate = self
现在,当我有以下代码并点击 Return
键时,键盘被关闭,但是当我尝试点击 save
按钮时,绝对没有任何反应。我在按钮上放置了一个断点,它没有被调用。
我在 textFieldShouldReturn
上放置了一个断点,它按预期被调用。如果我注释掉 textFieldShouldReturn
代码,则该按钮可以正常工作。我不确定到底发生了什么。
extension CreateN : UITextFieldDelegate {
func handleTextFields() {
titleTextField.addTarget(self, action: #selector(textFieldDidChange), for: .editingChanged)
}
@objc func textFieldDidChange() {
guard let title = titleTextField.text, !title.isEmpty
else {
saveButton.isEnabled = false
return
}
saveButton.isEnabled = true
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
view.endEditing(true)
}
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
titleTextField.resignFirstResponder()
return true
}
}
class CreateN: UIViewController {
let saveButton = UIBarButtonItem(title: "Save", style: .plain, target: self, action: #selector(saveTapped))
override func viewDidLoad() {
super.viewDidLoad()
titleTextField.delegate = self
setNavSaveButton()
handleTextFields()
}
func setNavSaveButton() {
saveButton.isEnabled = false
navigationItem.rightBarButtonItem = saveButton
}
@objc func saveTapped() {
print("Tap")
}
}
最佳答案
这是一个非常有趣的问题,要解决你需要更换
let saveButton = UIBarButtonItem(title: "Save", style: .plain, target: self, action: #selector(saveTapped))
与
var saveButton: UIBarButtonItem!
并在您的viewDidLoad
方法中添加
saveButton = UIBarButtonItem(title: "Save", style: .plain, target: self, action: #selector(saveTapped))
viewDidLoad
的最终代码将是:
override func viewDidLoad() {
super.viewDidLoad()
saveButton = UIBarButtonItem(title: "Save", style: .plain, target: self, action: #selector(saveTapped))
titleTextField.delegate = self
setNavSaveButton()
handleTextFields()
}
它会完全正常工作。
关于ios - TextFieldShouldReturn 弄乱了选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54867765/
我是一名优秀的程序员,十分优秀!