UITextView уволился первый респондент на "Готово"

Я ищу в Интернете около часа и не могу найти никакого кода, который помог бы мне с этим.

У меня есть UITextView, от которого мне нужно отказаться от первого респондента, когда пользователь нажимает кнопку «Готово» на своей клавиатуре.

Я видел в Интернете такой код:

-(BOOL) textFieldShouldReturn:(UITextField *)textField {
 [textField resignFirstResponder];
 return NO;
}

Но для UITextView это не сработает. Проще говоря, как узнать, когда пользователь нажимает кнопку «Готово» на клавиатуре?


person Richard J. Ross III    schedule 20.06.2011    source источник


Ответы (2)


Реализуйте метод делегата shouldChangeTextInRange:.

Используйте нижеприведенный подход, и решение будет работать только с @ "\ n" (символ новой строки).

//In you *.h file make sure you add
@interface v1ViewController : UIViewController <UITextViewDelegate>

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    myTextField.delegate = self;
}

    - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range 
          replacementText:(NSString *)text
        {

            if ([text isEqualToString:@"\n"]) {

                [textView resignFirstResponder];
                // Return FALSE so that the final '\n' character doesn't get added
                return NO;
            }
            // For any other character return TRUE so that the text gets added to the view
            return YES;
    }
person Jhaliya - Praveen Sharma    schedule 20.06.2011
comment
Я это настроил. как я могу определить, когда это нажато. - person Richard J. Ross III; 20.06.2011
comment
установить делегат текстового поля, например myTextField.delegate = self;, и вернуть YES в методе textFieldShouldReturn; - person Jhaliya - Praveen Sharma; 20.06.2011
comment
@Jhaliya, пожалуйста, прочтите OP, это текстовый просмотр, а не текстовое поле - person Richard J. Ross III; 20.06.2011
comment
@Jhaliya Я вижу, вы обновили свой пост. Разве не лучше использовать «ДА» и «НЕТ» вместо «ИСТИНА» и «ЛОЖЬ» в obj-c? - person Richard J. Ross III; 20.06.2011
comment
@ Ричард Дж. Росс III: Обновленный ответ. - person Jhaliya - Praveen Sharma; 20.06.2011

Вы можете использовать метод делегата

- (void)textViewDidEndEditing:(UITextView *)textView { 
    [textView resignFirstResponder];
}

Вы должны установить свой контроллер в качестве делегата для TextView. Дополнительные методы вы можете найти здесь: http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UITextViewDelegate_Protocol/Reference/UITextViewDelegate.html%23//apple_ref/doc/uid/TP40006897

person Pierre    schedule 20.06.2011
comment
Не сработало, в моем приложении ничего другого не произошло. У меня настроен мой делегат, и у меня есть клавиатура, настроенная так, как я хочу, но этот код никогда не вызывается. - person Richard J. Ross III; 20.06.2011
comment
textViewDidEndEditing: вызывается, когда редактирование завершено, другими словами, когда textView уже отказался от первого респондента, поэтому [textView resignFirstResponder]; внутри него не будет иметь никакого эффекта. - person nacho4d; 20.06.2011