2013-09-06 2 views
4

Кто-нибудь заметил, что UITextField звонки textFieldDidEndEditing после нажатия кнопки очистки, но text свойство все еще имеет старые данные?UITextField вызывает textFieldDidEndEditing при очистке, но свойство `text` имеет данные

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

На данный момент мне приходится полагаться на данные из всех элементов управления редактирования на кнопку «Отправить» основной формы. Но в идеале я предпочел бы собирать данные в обработчике textFieldDidEndEditing.

Есть ли лучшие способы обхода?

Я на прошивке 6.

Update: В основном вот что я имею в виде

  • UITextField и UiButton находятся на форме.
  • клавиатуры по телефону оптимизации был отменен resignFirstResponder в обработчик UITapGestureRecognizer

Действия по воспроизведению проблемы:

  • Нажмите на редактирования. Введите текст.
  • Нажмите вне текстового контроля.
  • textFieldDidEndEditing называется. Свойство .text имеет значение, которое я ввел. Все хорошо.
  • Нажмите снова элемент управления редактированием.
  • Нажмите кнопку очистки.
  • textFieldDidEndEditing вызывается снова. Но свойство .text все еще имеет значение, которое я просто удалил!
  • Теперь, когда вы видите курсор, мигающий внутри UITextField, нажмите на кнопку в форме.
  • Клавиатура отклоняется textFieldDidEndEditing никогда не называлась.

Я буду загружать образец проекта на GitHub завтра.

ответ

5

Я столкнулся с точно такой же проблемой. В моем случае, по крайней мере, это было связано с добавлением UITapGestureRecognizer в self.view (чтобы убрать клавиатуру, если вырезать за пределами UITextField) и установить cancelsTouchesInView=NO на распознаватель жестов. Я установил это свойство, чтобы получить гиперссылку, работающую на TTTAttributesLabel, который у меня есть в другом месте в представлении.

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

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShowNotification:) name:UIKeyboardDidShowNotification object:nil]; 
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidHideNotification:) name:UIKeyboardDidHideNotification object:nil]; 

(подписаться на уведомления)

- (void)keyboardDidShowNotification:(NSNotification*)notification 
{ 
    tapGestureRecognizer.cancelsTouchesInView = YES; 
} 

- (void)keyboardDidHideNotification:(NSNotification *)notification 
{ 
    tapGestureRecognizer.cancelsTouchesInView = NO; 
} 

(ручка уведомлений)

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

+0

Woow !!, очень спасибо –

-1

попробовать здесь:

-(BOOL) textFieldShouldReturn:(UITextField*) textField 
1

Первая проверка UITextFieldDelegate назначается или нет, то

реализации textFieldShouldClear делегата и писать код здесь очистить свой TextField

Для этого необходимо установить имущество clearButtonMode,

yourTextField.clearButtonMode = UITextFieldViewModeWhileEditing; 
yourTextField.delegate = self; 

Затем осуществить делегат textFieldShouldClear

.ч файла

@interface myViewController: UIViewController <UITextFieldDelegate>{ 
} 

.m файл

-(BOOL)textFieldShouldClear:(UITextField *)textField 

    yourTextFeild.text = @""; 
    return YES; 
} 
+0

Спасибо! Я сделал все это. К сожалению, это не имеет значения. Также следует упомянуть, что 'textFieldDidEndEditing' вызывается ** перед **' textFieldShouldClear'. – expert

 Смежные вопросы

  • Нет связанных вопросов^_^