iOS:如何获取当前可见的键盘类型



如何确定键盘是否为数字、Twitter、电子邮件等类型。。。?

编辑:有没有一种方法可以在不使用插座的情况下检测键盘类型?

考虑到ViewController中有两个textFields,您需要从UITextFieldDelegate协议中实现textFieldShouldBeginEditing方法,如下所示:

class ViewController: UIViewController, UITextFieldDelegate {
@IBOutlet weak var tfEmail: UITextField!
@IBOutlet weak var tfPassword: UITextField!
func textFieldDidBeginEditing(_ textField: UITextField) {
if textField.keyboardType == .emailAddress {
// this is the tfEmail!
}
if textField.isSecureTextEntry {
// this is tfPassword!
}
}
}

确保他们的委托以编程方式连接到ViewController:

tfEmail.delegate = self
tfPassword.delegate = self

或从接口生成器。

请注意,您可以通过检查其keyboardType属性来识别当前textField的键盘类型,该属性是UIKeyboardType枚举的实例:

为给定的基于文本的视图显示的键盘类型。与一起使用keyboardType属性。

UITextView怎么样

使用UITextViews时应应用完全相同的功能,但您需要从UITextViewDelegate协议中实现textViewDidBeginEditing(_:)方法,而不是实现textFieldShouldBeginEditing。同样,确保textView的委托连接到ViewController。

此外,

如果您检查键盘类型的主要目的只是识别当前响应的textField/textView,我建议直接检查:

class ViewController: UIViewController, UITextFieldDelegate, UITextViewDelegate {
@IBOutlet weak var tfEmail: UITextField!
@IBOutlet weak var tfPassword: UITextField!
@IBOutlet weak var textViewDescription: UITextView!
override func viewDidLoad() {
super.viewDidLoad()
tfEmail.delegate = self
tfPassword.delegate = self
textViewDescription.delegate = self
}
func textFieldDidBeginEditing(_ textField: UITextField) {
if textField === tfEmail {
// this is the tfEmail!
}
if textField === tfPassword {
// this is tfPassword!
}
}
func textViewDidBeginEditing(_ textView: UITextView) {
if textView === textViewDescription {
// this is description textview
}
}
}

有关===运算符的详细信息,您可能需要检查此问题/答案

希望这能有所帮助。

除了AhmadF的好答案之外,这是我在任何时候获取当前键盘类型的方法:


步骤1:代表UITextField

class File: UIViewController, UITextFieldDelegate{//...}

viewDidLoad()更新为:

@IBOutlet weak var normalTextField: UITextField!
@IBOutlet weak var numberTextField: UITextField!
@IBOutlet weak var emailTextField: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
numberTextField.keyboardType = .numberPad
normalTextField.keyboardType = .default
emailTextField.keyboardType = .emailAddress
numberTextField.delegate = self
normalTextField.delegate = self
emailTextField.delegate = self
}

步骤2:使用UITextField的方法:

添加一个名为keyboardType的变量,如下所示:

var keyboardType: UIKeyboardType? = nil

然后,每当新的textField开始编辑时更改它:

func textFieldDidBeginEditing(_ textField: UITextField) {
keyboardType = textField.keyboardType
}
func textFieldShouldEndEditing(_ textField: UITextField) -> Bool {
keyboardType = nil
return true
}

步骤3:创建并调用如下函数:

func getCurrentKeyboard() -> String{
if keyboardType == nil{
return "no current keyboard"
}
else if keyboardType == .numberPad{
return "number"
}
else if keyboardType == .emailAddress{
return "email"
}
else{
return "default"
}
}
@IBAction func displayCurrentKeyboard(_ sender: UIButton) {
print(self.getCurrentKeyboard())
}

并输出:email / number / no current keyboard / default,具体取决于情况。

如果你想用if-else语句检查它是哪种类型的键盘,你可以把displayCurrentKeyboard()方法改为:

@IBAction func displayCurrentKeyboard(_ sender: UIButton) {
let keyboardString = self.getCurrentKeyboard()
if keyboardString == "number"{
//...
}
else if keyboardString == "email"{
//...
}
else{
//...
}
}

就这样!你可以在代码中的任何地方使用以下用法调用这个:

let keyboardString = self.getCurrentKeyboard()

注意:此方法还处理屏幕上没有可见键盘的情况,在这种情况下返回no current keyboard

如果这有帮助,请告诉我!

相关内容

  • 没有找到相关文章

最新更新