1
votes

Purpose: I am attempting to toggle the "Save" UIBarButtonItem with the "Hide Keyboard" UIBarButtonItem whenever the Keyboard appears (and then do the opposite when the "Hide Keyboard" button is clicked).

So far I have created two UIBarButtonItems and connected them both to Interface Builder.

@property (weak, nonatomic) IBOutlet UIBarButtonItem *saveButton;
@property (weak, nonatomic) IBOutlet UIBarButtonItem *hideKeyButton;

Screenshot

This is the code I have setup so far in my main:

- (void)keyboardDidShow:(NSNotification *)aNotification {
    // Show HideKey Button
    // Hide Save Button
}

- (void)keyboardWillHide:(NSNotification *)aNotification {
    // Show Save Button
    // Hide HideKey Button
}

On Interface Builder, the Save button is present by default. Programatically, how do I show the HideKey button and Hide the Save button? Thanks.

2

2 Answers

1
votes

There are two parts to make this work.

First, you need to register for the notifications, what you can do is, in your viewDidLoad, add the following:

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(keyboardDidShow:)
                                             name:UIKeyboardDidShowNotification
                                           object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(keyboardWillHide:)
                                             name:UIKeyboardWillHideNotification
                                           object:nil];

Secondly, in your event handlers, simply set the buttons:

- (void)keyboardDidShow:(NSNotification *)aNotification {
    self.navigationItem.rightBarButtonItem = hideKeyButton;
}

- (void)keyboardWillHide:(NSNotification *)aNotification {
    self.navigationItem.rightBarButtonItem = saveButton;
}
1
votes

Instead of using IB for this task, I would do it programmatically.

Something like this:

UIBarButtonItem *saveButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemSave
                                                                             target:self
                                                                             action:@selector(saveButtonPressed:)];
[self.navigationItem setRightBarButtonItem:saveButton];

And in a similar fashion to create and set the HideKey button.

Then, of course you may want to cache the UIBarButtonItems, setting lazy @properties for them.