UITextField отказывается от первого ответчика iOS4

У меня есть простой фрагмент кода, который работает на всех системах, кроме iOS4. Речь идет об отставке первого ответчика для UITextField. Текстовое поле подключено, и вот код для делегата:

- (BOOL)textFieldShouldReturn:(UITextField *)textField{
    [opis resignFirstResponder];
    return YES;
}

Я пробовал это почти всеми возможными способами, пытаясь вернуть NO, и это не работает. Самое странное, что он РАБОТАЕТ на всех ОС iPhone до версии 4.0, а также на iPad (проверено в симуляторах и на реальных устройствах). Кто-нибудь может помочь?


person dusker    schedule 06.07.2010    source источник
comment
Почему бы не использовать [textField resignFirstResponder];? Возможно, ваша переменная opis настроена неправильно.   -  person Eiko    schedule 06.07.2010
comment
Тоже пробовал - не работает.   -  person dusker    schedule 06.07.2010
comment
Вот что я тоже предлагаю попробовать использовать [textField resignFirstResponder]; или проверьте, что текстовое поле правильно выделено и является тем же текстовым полем, которое вы пытаетесь уйти в отставку. Удачного кодирования...   -  person Suresh Varma    schedule 06.07.2010
comment
Все правильно распределено и подключено к розеткам. Пробовал также [textField resignFirstResponder], но это не работает.   -  person dusker    schedule 06.07.2010
comment
Вы пытались установить точку останова в методе textFieldShouldReturn? Это позволит определить, связана ли проблема с вызовом метода делегата или, альтернативно, с текстовым полем, отказывающимся отказаться от статуса первого ответившего.   -  person Sean Patrick Murphy    schedule 06.07.2010
comment
Можете ли вы свести это к простому тестовому случаю?   -  person tc.    schedule 06.07.2010


Ответы (3)


Это работало с моим 3GS в iOS4. Вы уверены, что правильно установили делегата UITextField?

- (BOOL) textFieldShouldReturn:(UITextField*)textField {
[textField resignFirstResponder];
return YES;
}
person Charter    schedule 06.07.2010
comment
Нет, я действительно имел в виду, что вы установили свой класс, реализующий протокол UITextFieldDelegate, в качестве делегата для выхода UiTextField. - person Charter; 06.07.2010
comment
В своем ответе вы указали TextVIEWDelegate. - person dusker; 06.07.2010
comment
Единственный раз, когда я видел это, когда свойство делегата UITextField не установлено на владельца файла. Почему вы звоните [описание resignFirstResponder]? Вы имеете в виду if (textField == opis) [textField resignFirstResponder]? - person Christopher Pickslay; 07.07.2010

Не уверен, что это похоже на ваш случай, но у меня есть UITextField в UIAlertView, и у меня была похожая проблема с клавиатурой, которая не закрывалась на resignFirstResponder.

Вот мое решение:

- (BOOL)textFieldShouldReturn:(UITextField *)textField {
    [textField resignFirstResponder];
    [alert resignFirstResponder];
    return YES;
}

Похоже, оповещение стало firstResponder после того, как textfield ушел в отставку.

person scott4arrows    schedule 07.09.2010

Это очень классическая проблема. Я предполагаю, что вы устанавливаете делегата для своего текстового поля, но вопрос в том, где? Вы устанавливаете инициализатор initWithNib... вашего контроллера? Чем это неправильно. Потому что ваше текстовое поле к тому времени не инициализировано. Он инициализируется в методе viewDidLoad, поэтому вы должны установить там свой делегат, и он должен работать.

person theiOSguy    schedule 23.05.2012