Обнаружение пробела в пустом рабочем образце UITextField Swift

Я знаю, что этот вопрос может показаться дублирующим, но, глядя на несколько ответов, у меня пока ничего не работает.

По сути, у меня есть приложение-викторина, отображается вопрос, и пользователю нужно заполнить несколько UITextFields, чтобы ответить на вопрос (т. Е. Если ответ ВЕНЕЦИЯ, будет показано 6 UITextFields, по 1 на букву).

Он смог обнаружить один символ в UITextFields, и как только пользователь нажмет клавишу, он перейдет к следующему UITextField. Я использую тег UITextField и метод becomeFirstResponder.

Проблема в том, что я хотел бы обнаружить возврат, когда UITextField пуст, поэтому я перейду к предыдущему UITextField.

Я пробовал это решение от Джейкоба Карабальо (Обнаружение возврата в пустой UITextField), но я не уверен, как использовать его с моим существующим UITextField.

Например, я пробовал:

 // @IBOutlet weak var textField1: UITextField!
    @IBOutlet weak var textField1:MyTextField!

Но вызов делегата

textField1.myDelegate = self

Вылетает

Я также замечаю, что, используя решение Джейкоба, я не смогу проверить, какой UITextField использовался, поскольку func textFieldDidDelete() не имеет UITextField as параметра, и мне нужно будет проверить его тег, т.е.

If textField.tag == 5 {
   textField4.becomeFirstResponder()
}

Любая помощь в этом, пожалуйста?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
77
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если вы используете решение Джейкоба, метод deleteBackward будет вызываться с текущим экземпляром UITextField. Таким образом, вы можете добавить протокол к этому UITextField классу и передать его обратно в свое представление. Что-то вроде этого:

protocol MyTextFieldDelegate: class {
   func backwardDetected(textField: MyTextField)
}

class MyTextField: UITextField {
   weak var myTextFieldDelegate: MyTextFieldDelegate?

   override func deleteBackward() {
     super.deleteBackward()

     self.myTextFieldDelegate?.backwardDetected(textField: self)
   }
}

Спасибо Lyric, но как мне объявить свой UITextField и как установить делегат? @IBOutlet слабая переменная textField1:MyTextField! объявление для каждого UITextField верно? и как установить делегата для каждого UITextField? Извините, я немного потерялся с этим

Jorge Fernández 12.06.2019 23:15

каждый из ваших делегатов должен быть типа MyTextField. и для каждого из них добавьте эту строку: self.textField1.myTextFieldDelegate = self

Lirik 12.06.2019 23:17

после этого реализуйте метод func backDetected(textField: MyTextField) в вашем контроллере/представлении

Lirik 12.06.2019 23:18

Извините Лирик, у меня ошибка в классе. В нем говорится: значение типа «UITextFieldDelegate» не имеет члена «backwardDetected».

Jorge Fernández 12.06.2019 23:37

исправил мой код выше. Это должно быть: self.myTextFieldDelegate?.backwardDetected(textField: self). Извини за это ;)

Lirik 12.06.2019 23:44

Спасибо, Лирик, и большое спасибо за вашего пациента :-). Теперь при установке делегата у меня ошибка при попытке запустить приложение в строке self.textField1.myTextFieldDelegate = self, приложение построено так, что просто при запуске выдает ошибку Thread 1: EXC_BAD_ACCESS (code=EXC_I386_GPFLT). Есть идеи, почему? Я создал новое приложение с нуля

Jorge Fernández 13.06.2019 10:07

Я думаю, что проблема заключается в объявлении IBOutlets, чтобы создать IBOutlet, который я управляю + перетаскиваю свой UITextView, а в типе я меняю значение по умолчанию (UITextField) на MyTextField, возможно, это проблема, но я не знаю другого способа для создания IBOutlets

Jorge Fernández 13.06.2019 11:05

Я решаю, что это меняется в Identity Inspector с UITextField на MyTextField. Лирик спасибо большое!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Jorge Fernández 13.06.2019 11:16

Рад помочь! @ХорхеФернандес

Lirik 13.06.2019 15:45

Другие вопросы по теме