Проблема с методом TextfieldShouldReturn при использовании Uitextfield вместе с UitextView
-
26-10-2019 - |
Вопрос
У меня есть сгруппированный вид таблицы, который содержит 3 раздела и каждую строку на раздел. Первые два ряда раздела содержит Uitextfield (имя и субъект - это названия раздела), а последний содержит uitextView (сообщение - заголовок раздела), потому что я хочу получить некоторые данные от пользователя от самого контроллера.
Два текстовых поля имеют returnkeytype как uireurnkeyNext. Для uitextView кнопка «Возврат» присутствует на клавиатуре для подачи новой линии. Поэтому я использовал метод TextFieldShouldReturn, чтобы перейти к следующей ячейке, нажав эти кнопки возвращаемого типа в Uikeyboard.
Следующая кнопка будет работать нормально с первым текстовым полем (имя). Здесь возникает проблема ... если я нажму следующую кнопку второй ячейки, она переходит в UitextView (последняя ячейка) с одной линией вниз. То есть курсор перемещает одну линию от своей первоначальной позиции.
Мой код ...
-(BOOL) textFieldShouldReturn:(UITextField *)textField {
[textField resignFirstResponder];
if (textField == nameTextField) {
[subjectTextField becomeFirstResponder];
}
else if(textField == subjectTextField) {
[messageTextView becomeFirstResponder];
}
return YES;
}
Что я должен сделать, чтобы эта работа была нормальной? Заранее спасибо..
Решение
При тестировании много вещей я нашел простое, но подходящее решение:
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
if ( [textField isEqual: nameTextField] )
{
[nameTextField resignFirstResponder];
[messageTextView becomeFirstResponder];
return NO;
}
return YES;
}
Он обрабатывает смирение самого Намексфилда и возвращает нет по запросу.
Другие советы
По сути, что происходит, так это то, что когда возврат нарезается, вы делаете текстовый просмотр первого респондента, и возврат добавляется в текстовое представление. Вот почему курсор идет на вторую строку. Попробуйте сделать это в своем TextViewDidChange: Metegate Method:
- (void)textViewDidChange:(UITextView *)textView {
if(textView.text == @"\r") {
textView.text = @"";
}
В эта ссылка Вы получите решение вашей проблемы. В этом, учитывая, как мы скрываем клавиатуру при редактировании текста.