Клавиша Done в приложении iPhone, закрывающая клавиатуру (с UITextView)

Я работаю над приложением для iPhone, а в приложении для iPhone пользователь вводит UITextView. Мне было интересно, как я могу добавить на клавиатуру клавишу «Готово» вместо обычной клавиши возврата, и когда вы нажимаете на эту клавишу, клавиатура закрывается.

Спасибо!


person Tapy    schedule 15.01.2011    source источник


Ответы (3)


В протоколе UITextViewDelegate нет -textViewShouldReturn: метода. Если вы хотите, чтобы клавиша return (done) закрывала клавиатуру, вероятно, лучше использовать вместо этого UITextField, UITextView предназначен для редактирования нескольких строк текста (поэтому вам нужен способ ввода разрыва строки).

Если вы действительно хотите закрыть клавиатуру при нажатии клавиши возврата в UITextView, вы, вероятно, могли бы сделать что-то вроде этого:

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {
  if ([text isEqual:@"\n"]) {
    [textView resignFirstResponder];
    return NO;
  }
  return YES;
}
person omz    schedule 15.01.2011
comment
Спасибо! Причина, по которой мне понадобилось использовать TextView, заключается в том, что приложение, над которым я работаю, представляет собой Twitter API. И если пользователь захочет прочитать твит перед его публикацией, это будет немного сложнее для пользователя. - person Tapy; 16.01.2011

Это очень просто:

textField.returnKeyType=UIReturnKeyDone;

Добавьте это в делегат текстового поля, чтобы убрать клавиатуру при ее нажатии:

- (BOOL)textFieldShouldReturn:(UITextField *)aTextfield {
    [aTextfield resignFirstResponder];
    return YES;
}
person grahamparks    schedule 15.01.2011
comment
Да, но это не закрывает клавиатуру. - person Tapy; 15.01.2011
comment
Извини за это. Добавил в свой ответ. - person grahamparks; 16.01.2011
comment
Я думаю, что вопрос касался UITextView, а не UITextField - person Mark Norgren; 16.08.2011
comment
Это не ответ на вопрос. Вопрос в UITextView, у которого нет метода делегата textFieldShouldReturn. - person Rick Hochstetler; 09.11.2012
comment
спрашивающий ожидал ответа о UITextView - person codercat; 12.11.2013
comment
Спасибо, это действительно помогло мне, поскольку мои функции делегата textFieldShouldEndEditing и textFieldDidEndEditing не вызывались. - person PeterPurple; 13.02.2014

Помимо настройки:

textField.returnKeyType = UIReturnKeyDone;

вам нужно установить делегата текстового поля для вашего класса и сделать что-то вроде этого:

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

    return YES;
}

Эту настройку returnKeyType также можно выполнить из Interface Builder - если у вас есть пользовательский интерфейс, определенный в XIB. С другой стороны, -resignFirstResponder позаботится о том, чтобы клавиатура исчезла. Это должно быть сделано в методе -textFieldShouldReturn: delegate, поскольку он вызывается, когда пользователь нажимает кнопку «Готово».

Надеюсь это поможет.

person Moszi    schedule 15.01.2011
comment
Он запрашивает UITextView, а не UITextField. - person Domness; 04.12.2011
comment
Тоже не отвечу на вопрос .. вопрос про UITextView. - person Rick Hochstetler; 09.11.2012