14

I'm working on an iPhone app and in the iPhone app the user is typing in an UITextView. I was wondering how I could add the done key on the keyboard instead of having the normal return key and when you click on that key the keyboard closes.

Thanks!

Tapy
  • 1,044
  • 6
  • 17
  • 30

3 Answers3

33

There is no -textViewShouldReturn: method in the UITextViewDelegate protocol. If you want the return (done) key to dismiss the keyboard, it's probably best to use a UITextField instead, UITextView is intended for editing multiple lines of text (so you need a way to enter a linebreak).

If you really want to dismiss the keyboard when hitting the return key in a UITextView, you could probably do something like this:

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {
  if ([text isEqual:@"\n"]) {
    [textView resignFirstResponder];
    return NO;
  }
  return YES;
}
omz
  • 53,243
  • 5
  • 129
  • 141
  • Thanks! The reason I was in need of using a TextView is because the app I'm working on is a Twitter API. And if the user would like to read thru the tweet before posting it then that would be a little messier for the user. – Tapy Jan 15 '11 at 21:26
-4

It's as simple as:

textField.returnKeyType=UIReturnKeyDone;

Add this to your text field's delegate to remove the keyboard when it's pressed:

- (BOOL)textFieldShouldReturn:(UITextField *)aTextfield {
    [aTextfield resignFirstResponder];
    return YES;
}
grahamparks
  • 16,130
  • 5
  • 49
  • 43
-6

In addition to setting:

textField.returnKeyType = UIReturnKeyDone;

you need to set the text field's delegate to your class, and do something like this:

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

    return YES;
}

This setting the returnKeyType can be done from Interface Builder as well - if you have your UI defined in a XIB. On the other hand the -resignFirstResponder will make sure that the keyboard disappears. It should be done in the -textFieldShouldReturn: delegate method, since that is invoked when the user taps on the Done button.

Hope this helps.

Moszi
  • 3,236
  • 2
  • 22
  • 20