键盘没有被解雇
Keyboard not being dismissed
我意识到这是一个微不足道的问题,在 SO 上有大量的答案。我可能只需要一双新鲜的眼睛,因为我已经对所有内容进行了三次检查,但看不出哪里出了问题。我只想在按下 return 键时关闭键盘。我正确地设置了委托并实现了正确的方法,那么为什么键盘不会消失呢?
viewController
中有 collectionView
会使事情复杂化吗? (文本字段不在 collectionView
内)
class SearchController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout, UITextFieldDelegate {
@IBOutlet weak var searchBar: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
searchBar.delegate = self
setupUI()
}
func textFieldShouldReturn(textField: UITextField) -> Bool {
searchBar.resignFirstResponder()
return true
}
我尝试过的事情:
- 清理项目
- 正在重启xcode
- 将
searchBar.resignFirstResponder()
更改为 textField.resignFirstResponder()
- 在 IB 中而不是在
viewDidLoad
中设置文本字段的委托
我到底错过了什么!?
使用此代码
view.endEditing(true)
您需要实施正确的文本字段委托方法。没有 textFieldShouldReturn(textField:)
这样的委托方法。正确的方法是 textFieldShouldReturn(_:)
.
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
searchBar.resignFirstResponder()
return false
}
_
有很大的不同。您可能复制了旧的 Swift 2 实现。
最好让 Xcode 执行代码完成,以确保您获得正在实施或调用的任何方法的正确签名。
我意识到这是一个微不足道的问题,在 SO 上有大量的答案。我可能只需要一双新鲜的眼睛,因为我已经对所有内容进行了三次检查,但看不出哪里出了问题。我只想在按下 return 键时关闭键盘。我正确地设置了委托并实现了正确的方法,那么为什么键盘不会消失呢?
viewController
中有 collectionView
会使事情复杂化吗? (文本字段不在 collectionView
内)
class SearchController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout, UITextFieldDelegate {
@IBOutlet weak var searchBar: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
searchBar.delegate = self
setupUI()
}
func textFieldShouldReturn(textField: UITextField) -> Bool {
searchBar.resignFirstResponder()
return true
}
我尝试过的事情:
- 清理项目
- 正在重启xcode
- 将
searchBar.resignFirstResponder()
更改为textField.resignFirstResponder()
- 在 IB 中而不是在
viewDidLoad
中设置文本字段的委托
我到底错过了什么!?
使用此代码
view.endEditing(true)
您需要实施正确的文本字段委托方法。没有 textFieldShouldReturn(textField:)
这样的委托方法。正确的方法是 textFieldShouldReturn(_:)
.
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
searchBar.resignFirstResponder()
return false
}
_
有很大的不同。您可能复制了旧的 Swift 2 实现。
最好让 Xcode 执行代码完成,以确保您获得正在实施或调用的任何方法的正确签名。