Как узнать, есть ли клавиатура типа numeric, Twitter, электронная почта и т. Д.??iOS: Как получить текущий вид клавиатуры?
Редактировать: Есть ли способ обнаружить тип клавиатуры без использования розетки?
Как узнать, есть ли клавиатура типа numeric, Twitter, электронная почта и т. Д.??iOS: Как получить текущий вид клавиатуры?
Редактировать: Есть ли способ обнаружить тип клавиатуры без использования розетки?
Считайте, что у вас есть буксирное TextFields в ViewController, Вам нужно будет реализовать textFieldShouldBeginEditing метод из UITextFieldDelegate протокола, следующим образом:
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
или из Interface Builder.
Обратите внимание, что вы можете распознать тип клавиатуры для текущего TextField, проверяя его свойство keyboardType, который является экземпляром UIKeyboardType перечисления:
Тип клавиатуры для отображения для данного представления текста на основе. Используется с свойство keyboardType.
Что относительно UITextView
?
точно такие же функции должны быть применен при работе с UITextViews, но вам нужно реализовать textViewDidBeginEditing(_:) метод из UITextViewDelegate протокола вместо реализации 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
}
}
}
Для получения дополнительной информации об операторе ===
вы можете проверить this question/answers.
Надеюсь, это помогло.
@ Xcoder123 благодарю вас за ваше примечание :) Я предполагаю, что это - как-то - должно привести к той же цели, OP, возможно, потребуется добавить некоторую логику для достижения определенной функциональности. –
Да, я добавил эту логику в свой ответ :-), и я действительно хотел добавить эту логику для случая, когда клавиатура не видна ... И я думаю, что наличие отдельной функции добавляет простоту, потому что ее легче получить и немного более настраиваемый –
Есть ли способ обнаружить тип клавиатуры без использования розетки? –
В дополнение к Ahmad F «s большой ответ, это мой подход получает текущий тип клавиатуры, в любое время:
Шаг 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
«s методы:
Добавить переменную 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
, в этом случае.
Дайте мне знать, если это поможет!
Используйте свойство '.keyboardType'' UITextField' для определения типа. – iphonic