Проблема с методом 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;
}


Что я должен сделать, чтобы это сработало нормально? Спасибо заранее..

605   3  

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

    Ничего не найдено.