在UITextField外部敲击时关闭键盘的最佳方式-IOS



我在这里找到了一些关于这方面的线索,还有一些在线视频,但每个解决方案似乎都有其他人报告的问题。我找到的最简单的解决方案如下。

import UIKit

类SignupController:UIViewController,UITextFieldDelegate{

// Outlets
@IBOutlet weak var logoImage: UIImageView!
@IBOutlet weak var nameTF: CustomTextField!
@IBOutlet weak var emailTF: CustomTextField!
@IBOutlet weak var passwordTF: CustomTextField!
@IBOutlet weak var confirmPassTF: CustomTextField!
// Actions
@IBAction func signupButton(_ sender: UIButton) {
}

override func viewDidLoad() {
super.viewDidLoad()
logoImage.image = UIImage(named: "logo2")
nameTF.delegate = self
emailTF.delegate = self
passwordTF.delegate = self
confirmPassTF.delegate = self
}
// Moves to next text field each time return key is pressed
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
if textField == nameTF {
textField.resignFirstResponder()
emailTF.becomeFirstResponder()
} else if textField == emailTF {
textField.resignFirstResponder()
passwordTF.becomeFirstResponder()
} else if textField == passwordTF {
textField.resignFirstResponder()
confirmPassTF.becomeFirstResponder()
}else if textField == confirmPassTF {
textField.resignFirstResponder()
}
return true
}

// Dismisses keyboard when tapped
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
self.view.endEditing(true)
}

}

它很有效,很简单,但我的项目和编码经验还处于初级阶段,所以我不确定这是不是因为它很短而成为最好的方法,还是因为缺乏经验/知识而错过了一些东西?

有人知道一个更好的解决方案吗?还是这个很好?

只需执行以下操作:

class viewController: UIViewController, UITextFieldDelegate {
// Outlets
@IBOutlet weak var logoImage: UIImageView!
@IBOutlet weak var nameTF: CustomTextField!
@IBOutlet weak var emailTF: CustomTextField!
@IBOutlet weak var passwordTF: CustomTextField!
@IBOutlet weak var confirmPassTF: CustomTextField!
// Actions
@IBAction func signupButton(_ sender: UIButton) {
}

override func viewDidLoad() {
super.viewDidLoad()
logoImage.image = UIImage(named: "logo2")
nameTF.delegate = self
emailTF.delegate = self
passwordTF.delegate = self
confirmPassTF.delegate = self
let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(dissMissKeyboard))
view.addGestureRecognizer(tap)
}
func dissMissKeyboard() {
view.endEditing(true)
}

我更喜欢使用UITextField委托方法:

func textFieldShouldReturn(_ textField: UITextField) -> Bool {
view.endEditing(true)
return true
}

或设置具有"完成"或"退出"按钮的inputAccessoryView。

然后需要为此实现手势识别。或者你可以这样做:

override func viewDidLoad() {
super.viewDidLoad()
//Looks for single or multiple taps. 
let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(dissMissKeyboard))
//Uncomment the line below if you want the tap not not interfere and cancel other interactions.
//tap.cancelsTouchesInView = false 
view.addGestureRecognizer(tap)
}
//Calls this function when the tap is recognized.
func dissMissKeyboard() {
//Causes the view (or one of its embedded text fields) to resign the first responder status.
view.endEditing(true)
}

最新更新