iOS программирование: более подробно разберитесь в первом респонденте - PullRequest
0 голосов
/ 27 апреля 2020

У меня есть проект iOS с текстовым полем и кнопкой. Нажатие на текстовое поле делает его первым респондентом и вызывается клавиатура. И когда я нажимаю кнопку после этого, клавиатура все еще остается на экране, а текстовое поле - все еще первым ответчиком. Естественное мышление, нажатие на кнопку должно сделать его первым респондентом и заставить текст, поданный в отставку, подать в отставку, но почему этот процесс не происходит в Xcode? Если мое приложение имеет 2 кнопки A и B, будет ли нажатие кнопки A отвечать на запросы? И будет ли нажатие кнопки B после этого сделать B первым ответчиком, и A подаст в отставку?

Ответы [ 2 ]

0 голосов
/ 27 апреля 2020

Если вы работаете в других средах, таких как веб-страница в настольном браузере, вы можете «переходить» от элемента к элементу, давая каждому элементу «фокус».

В iOS Элементы пользовательского интерфейса не имеют такого состояния «фокуса».

Если вы нажмете, например, UITextField или UITextView, этот объект станет firstResponder, и поскольку он принимает ввод с клавиатуры, клавиатура показана. UIButton не не , по умолчанию имеет включенный canBecomeFirstResponder и не принимает ввод с клавиатуры.

Вот почему нажатие кнопки не отменяет клавиатуру - или «взять «отвести фокус» от текстового поля.

Вы можете подкласс UIButton, чтобы придать ему эти свойства, или, как показано в другом ответе, добавить код, чтобы текстовое поле сообщило resignFirstResponder, но это не стандартное поведение.

0 голосов
/ 27 апреля 2020

Первый респондент - это тот элемент управления, который в данный момент готов ответить на действия.

В UIKit это обычно тот элемент управления, который активировал клавиатуру и получает ввод. Если вы хотите, чтобы этот текстовый элемент управления прекратил ожидание ввода - который, в свою очередь, отклоняет клавиатуру - вы должны вызвать его метод resignFirstResponder (), который передает эстафету первого респондента следующему ожидающему компоненту.

В вашем случае, если вы хотите закрыть клавиатуру, вы можете сделать 2 вещи:

  1. Вы можете вызвать resignFirstResponder () из текстового поля
  2. В вашем IBAction кнопки вы можете написать self.view.endEditing(true), который закроет клавиатуру для вас.

Пожалуйста, прокомментируйте, если у вас есть какие-либо вопросы.

Рад помочь!

...