Проблема с методом textFieldShouldReturn при использовании UITextField вместе с UITextView
У меня есть сгруппированное табличное представление, которое содержит 3 секции и каждую строку на секцию. Первые две строки раздела содержат UITextField(название и тема-заголовки разделов), а последняя строка содержит UITextView (сообщение-заголовок раздела), потому что я хочу получить некоторые данные от пользователя самим этим контроллером.
Два текстовых поля имеют returnKeyType как UIReturnKeyNext. Для UITextView кнопка "return" присутствует в клавиатуре для подачи новой строки. Поэтому я использовал textFieldShouldReturn метод для перехода к следующей ячейке, нажав эти кнопки возвращаемого типа в UIKeyboard.
Следующая кнопка будет отлично работать с первым текстовым полем(имя). Вот тут-то и возникает проблема... Если я нажму кнопку Next второй ячейки, она перейдет в UITextView(последняя ячейка) с одной строкой вниз. То есть курсор перемещается на одну строку в сторону от своего исходного положения.
Мой код таков...
-(BOOL) textFieldShouldReturn:(UITextField *)textField {
[textField resignFirstResponder];
if (textField == nameTextField) {
[subjectTextField becomeFirstResponder];
}
else if(textField == subjectTextField) {
[messageTextView becomeFirstResponder];
}
return YES;
}
Что я должен сделать, чтобы это сработало нормально? Спасибо заранее..
3 ответов:
Во время тестирования многих вещей я нашел простое, но подходящее решение:
- (BOOL)textFieldShouldReturn:(UITextField *)textField { if ( [textField isEqual: nameTextField] ) { [nameTextField resignFirstResponder]; [messageTextView becomeFirstResponder]; return NO; } return YES; }Он обрабатывает само изменение поля nameTextField и возвращает запрос NO.
В основном происходит то, что при нажатии return вы делаете text view первым ответчиком, и return добавляется в текстовое представление. Вот почему курсор перемещается на вторую строку. Попробуйте сделать это в методе делегата textViewDidChange:
- (void)textViewDidChange:(UITextView *)textView { if(textView.text == @"\r") { textView.text = @""; }
В этой ссылке вы получите решение своей задачи. В этом дано то, как мы прячем клавиатуру, когда редактирование текста сделано.
Comments