iOS 12,Xcode 10.1。我有一个具有UITextField
的视图。委托连接已连接到情节提要中的视图控制器。我已经做过无数次了。
在键盘上按Return键时,我想将第一响应者发送到下一个字段,所以正确的方法如下:
extension SignInViewController: UITextFieldDelegate {
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
switch textField {
case loginEmailField:
loginPasswordField.becomeFirstResponder()
case loginPasswordField:
loginPasswordField.resignFirstResponder()
signInTapped(sender: UIButton())
default: break
}
return true
}
}
在连接了带键盘保护套的iPad Pro或带模拟器的Mac上连接了硬件键盘后,委托方法不会触发。调出屏幕键盘,效果很好。
我以前已经实施过类似的事情,但我一直在努力地想知道它们之间的任何差异,但无济于事。我可以寻找什么潜在的原因来解决此问题,并使硬件键盘的Return键起作用?
答案 0 :(得分:1)
我已经尝试过此方法,并且在模拟器上同时使用Mac键盘和外部蓝牙键盘在模拟器上按下 Return / Enter 键时,textFieldShouldReturn
被正确调用和iPad。也许您的UITextFieldDelegate
设置存在问题?
我还尝试通过代码(如下所示)和通过Interface Builder连接delegate
,并且两者都可以正常工作。
import UIKit
class ViewController: UIViewController, UITextFieldDelegate {
@IBOutlet var textFieldA: UITextField!
@IBOutlet var textFieldB: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
textFieldA.delegate = self
textFieldB.delegate = self
}
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
switch textField {
case textFieldA:
textFieldB.becomeFirstResponder()
case textFieldB:
textFieldB.resignFirstResponder()
default:
break
}
return true
}
}
答案 1 :(得分:0)
您可以从NotificationCenter收听UIKeyboardWillHideNotification
。