Проблема с методом textFieldShouldReturn при использовании UITextField вместе с UITextView - PullRequest
6 голосов
/ 26 июля 2011

У меня есть сгруппированное табличное представление, которое содержит 3 раздела и по каждой строке на раздел.Первые две строки раздела содержат UITextField (Name & Subject - заголовки разделов), а последняя содержит UITextView (Message - заголовок раздела), потому что я хочу получить некоторые данные от пользователя этим контроллером.Два текстовых поля имеют returnKeyType как UIReturnKeyNext.Для UITextView кнопка «возврата» присутствует на клавиатуре для подачи новой строки.Поэтому я использовал метод textFieldShouldReturn для перехода к следующей ячейке, нажимая эти кнопки типа возврата в UIKeyboard.

Следующая кнопка будет отлично работать с первым текстовым полем (Имя).Здесь возникает проблема ... Если я нажимаю кнопку "Далее" второй ячейки, она переходит к UITextView (последняя ячейка) одной строкой вниз.То есть курсор перемещается на одну строку от своей первоначальной позиции.

Мой код ...

-(BOOL) textFieldShouldReturn:(UITextField *)textField {
    [textField resignFirstResponder];
    if (textField == nameTextField) {
        [subjectTextField becomeFirstResponder];    
    }
    else if(textField == subjectTextField) {
        [messageTextView becomeFirstResponder];
    }
    return YES;
}

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

Ответы [ 3 ]

11 голосов
/ 02 августа 2011

Во время тестирования многих вещей я нашел простое, но подходящее решение:

- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
    if ( [textField isEqual: nameTextField] )
    {
        [nameTextField resignFirstResponder];
        [messageTextView becomeFirstResponder];
        return NO;
    }

    return YES;
}

Он обрабатывает отставку самого nameTextField и возвращает NO к запросу.

0 голосов
/ 26 июля 2011

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

- (void)textViewDidChange:(UITextView *)textView {
        if(textView.text == @"\r") {
        textView.text = @"";
}
0 голосов
/ 26 июля 2011

В по этой ссылке вы получите решение вашей проблемы.При этом учитывая то, как мы скрываем клавиатуру, когда редактирование текста завершено.

...