Как сделать так, чтобы элементы пользовательского интерфейса играли как равные (отдельные перья), когда они содержатся в другом перо? - PullRequest
0 голосов
/ 14 февраля 2011

У меня есть перо (Nib # 1), определяющее пользовательский UITableViewCell, в котором есть UITextField. Владелец файла этого пера является общим UIViewController, поэтому я могу создать экземпляр в любом VC.

У меня есть еще одно перо (Nib # 2), которое содержит UIButton, которое подключено к IBAction в владельце файла. Это конкретный экземпляр UIViewController, назовем его FormViewController.

Оба эти кончика подключены к FormViewController.

Вот моя проблема.

У меня есть UITableView с двумя экземплярами Nib # 1. Когда я нажимаю на соответствующие элементы UITextField, запускаются такие методы UITextFieldDelegate, как textFieldDidEndEditing:. ОДНАКО, если я нажму UIButton в Nib # 2, методы UITextFieldDelegate не будут вызваны. Почему они не срабатывают? Это потому, что у этих UIView есть разные Владельцы Файла? Как мне обойти эту проблему?

Возможный связанный вопрос: почему textFieldDidEndEditing: не вызывается?

1 Ответ

1 голос
/ 16 февраля 2011

textFieldDidEndEditing: метод срабатывает, когда UITextField покидает статус «firstResponder».

UITextField автоматически подает в отставку как firstResponder, когда вы нажимаете на другой объект (например, другой UITextField), который становится новым firstResponder.

Поскольку UIButton не становится firstResponder при нажатии, вам нужно вызвать «resignFirstResponder» в вашем UITextField, чтобы вызвать textFieldDidEndEditing:

Простой способ сделать это, если вы не знаете, кто первым ответит на вызов endEditing: по вашему мнению.

"Заставляет представление (или одно из его встроенных текстовых полей) отказаться от статуса первого респондента." -документ

Пример:

  • (IBAction) buttonTapped: (UIButton *) отправитель {

    [self.view endEditing: YES]; }

...