Как сделать UITextView «Готово» кнопкой resignFirstResponder? - PullRequest
23 голосов
/ 20 октября 2010

Я пытаюсь сделать мою редактируемую UITextView повторной клавиатурой (resignFirstResponder), когда пользователь нажимает «Готово».Используя UITextField, я смог сделать это с помощью следующего кода:

- (IBAction)doneEditing:(id)sender {
    [sender resignFirstResponder];
}

... и затем присоединить его к соответствующему UITextField в Интерфейсном Разработчике к действию "Конецна выходе ".

Однако, с UITextView я не могу получить доступ к действию «Закончился при выходе».Любые предложения о том, как это сделать?

Ответы [ 4 ]

88 голосов
/ 15 сентября 2011

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

- (BOOL) textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {
    if([text isEqualToString:@"\n"]){
        [textView resignFirstResponder];
        return NO;
    }else{
        return YES;
    }
}

Вставьте это в класс, который вы назначаете в качестве делегата UITextView, и он будет работать.

13 голосов
/ 20 октября 2010

новый ответ

В вашем представлении у вас будет кнопка UIBarButton ("Готово"), подключенная к IBAction ниже:

- (IBAction)doneEditing:(id)sender {
    [textView resignFirstResponder];
}

ГдеtextView - это ваш выход textView, определенный в вашем файле .h и связанный с файлом раскадровки или .xib.Например:

@property (retain, nonatomic) IBOutlet UITextView *textView;

старый ответ

Проверьте следующее:

  1. Указан ли UITextViewDelegate в .h
  2. Реализуйте метод делегата для uitextview: textViewShouldEndEditing, верните YES
  3. убедитесь, что ваш .m (контроллер) является делегатом для uitextview в IB
  4. resignFirstResponder теперь должен работать.
0 голосов
/ 23 апреля 2018

Вы можете реализовать UITextViewDelegate и ждать "\ n" в Swift 4:

    myTextView.delegate = self

// ...

extension MyViewController : UITextViewDelegate {

    func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
        if text == "\n" {
            textView.resignFirstResponder()
            return false
        }

        return true
    }
}
0 голосов
/ 29 июня 2012

Чтобы кнопка «Готово» отклонила клавиатуру, а resignFirstResponder необходимо реализовать метод делегата.

  1. В вашем .h реализовать UITextFieldDelegate

    @interface YourViewController : UIViewController <UITextFieldDelegate>
    
  2. Затем реализуйте textFieldShouldReturn в вашем .m

    -(BOOL) textFieldShouldReturn:(UITextField *)textField
    {
    [textField resignFirstResponder];
    return YES;
    }
    
  3. Не забудьте связать делегат UITextField с владельцем файла (очень важно)

...