Add button done in UINavigation panel

How to add a "Done" button to UINavigation panel when the user touches a particular text box or a text box?

Or is it better to determine when the keyboard is displayed, and then display the button.

I want done Undo button keypad as standard Notes application.

+4
source share
2 answers

You can try something similar to this:

- (void)textFieldDidBeginEditing:(UITextField *)textField { UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(doneEditing)]; [[self navigationItem] setRightBarButtonItem:doneButton]; [doneButton release]; } 

and

 - (void)textViewDidBeginEditing:(UITextView *)textView { UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(doneEditing)]; [[self navigationItem] setRightBarButtonItem:doneButton]; [doneButton release]; } *) textView - (void)textViewDidBeginEditing:(UITextView *)textView { UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(doneEditing)]; [[self navigationItem] setRightBarButtonItem:doneButton]; [doneButton release]; } ] initWithBarButtonSystemItem: UIBarButtonSystemItemDone - (void)textViewDidBeginEditing:(UITextView *)textView { UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(doneEditing)]; [[self navigationItem] setRightBarButtonItem:doneButton]; [doneButton release]; } ]; - (void)textViewDidBeginEditing:(UITextView *)textView { UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(doneEditing)]; [[self navigationItem] setRightBarButtonItem:doneButton]; [doneButton release]; } 

with the following settings as you like

 - (void)doneEditing { [[self view] endEditing:YES]; } ]; - (void)doneEditing { [[self view] endEditing:YES]; } 

then delete the button in - (void)textFieldDidEndEditing:(UITextField *)textField , as well as in - (void)textViewDidEndEditing:(UITextView *)textView *) textView

Do not forget to set the delegates!

+6
source

You must accept the delegate protocol, as I believe you have the advantage. You can do it -

 - (void)textViewDidBeginEditing:(UITextView *)textView { UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:textView action:@selector(resignFirstResponder)]; self.navigationItem.rightBarButtonItem = doneButton; [doneButton release]; } *) textView { - (void)textViewDidBeginEditing:(UITextView *)textView { UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:textView action:@selector(resignFirstResponder)]; self.navigationItem.rightBarButtonItem = doneButton; [doneButton release]; } 

But if you watch the notification, you may not know which of them is the first responder. Of course, this is not a big problem if you have only one item about which to worry.

+2
source

All Articles