it-roy-ru.com

Как сделать UITextView "Готово" кнопкой resignFirstResponder?

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

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

... и затем присоединить его к соответствующей UITextField в Интерфейсном Разработчике к действию «Закончился ли при выходе». 

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

21
Jason

новый ответ

На вашем View у вас будет UIBarButton («Готово»), который подключен к IBAction ниже:

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

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

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

старый ответ

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

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

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

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

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

87
Rich Lowenberg

Вы можете реализовать 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
Axel Guilmin