UITextView: должен ли я всегда подавать в отставкуFirstResponder? - PullRequest
1 голос
/ 19 июня 2011

Должен ли я всегда подавать в отставкуFirstResponder для UITextView?Или это произойдет автоматически, когда исчезнет контроллер представления?

Я спрашиваю, потому что у меня проблема, похожая на iPhone Objective-C: клавиатура не будет скрываться с помощью resignFirstResponder, иногда , где клавиатура остается включенной, даже когда контроллер nav нажимает и выскакивает другие контроллеры представления.Клавиатура работает, и когда я нажимаю «Готово», она не фокусируется на UITextView (т. Е. Курсор исчезает), но клавиатура остается включенной.

Я так и не узнал, почему это происходит, но, возможно, это из-зане делать resignFirstResponder до нажатия другого контроллера вида, но я подумал, что это необязательно?

Ответы [ 4 ]

2 голосов
/ 19 июня 2011

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

Способ обойти это, чтобы добавить textView.delegate = nil вызов в методе dealloc вашего контроллера представления - очевидно, поставьте его перед вами.освободить текстовое представление.

1 голос
/ 25 июня 2011

Я не думаю, что вам нужно, потому что Образец Xcode UICatalog UITextField не вызывает resignFirstResponder, прежде чем TextViewController появится.

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

1 голос
/ 25 июня 2011

В контракте между UITextView и его делегатом говорится, что делегат отправит -resignFirstResponder , когда текстовое представление завершит редактирование.Это информирует платформу о том, что представление завершено редактированием, инициирует связанные с этим события (willEndEditing и didEndEditing) и позволяет другим частям иерархии респондента реагировать соответствующим образом.Невыполнение этого требования может сработать, но оно не следует контракту (это все протокол), на которое он согласился.

0 голосов
/ 19 июня 2011

Вызов resignFirstResponder гарантирует, что свойство text содержит фактический текст, показанный в элементе управления.

В зависимости от состояния это не всегда необходимо, но если ваши элементы управления отказались от первого ответчика, вызнаю, что вы работаете с действительными данными.

...