Why UIBarButtonItem not getting clicks in UIToolbar set as inputAccessoryView of UITextField?
cocoa-touch, inputaccessoryview, objective-c, uibaritem, uitoolbar
Solution
I just tried the following code and it worked just fine. Tested on both iOS 6 & 7 simulator.
@interface HSViewController
@property (weak, nonatomic) IBOutlet UITextField *closeDateTextField;
@property (strong, nonatomic) UIToolbar * datePickerToolbar;
@end
@implementation HSViewController
- (void)viewDidLoad
{
NSLog(@"%s", __PRETTY_FUNCTION__);
[super viewDidLoad];
self.datePickerToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
UIBarButtonItem * doneBtn =
[[UIBarButtonItem alloc]
initWithBarButtonSystemItem:UIBarButtonSystemItemDone
target:self
action:@selector(hidePicker:)];
[self.datePickerToolbar setItems:@[doneBtn] animated:NO];
UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(0, 0, 320, 120)];
textField.backgroundColor = [UIColor greenColor];
[self.view addSubview:textField];
self.closeDateTextField = textField;
self.closeDateTextField.inputAccessoryView = self.datePickerToolbar;
}
- (void)hidePicker:(id)sender {
NSLog(@"%s", __PRETTY_FUNCTION__);
[self.closeDateTextField resignFirstResponder];
}
@end
Problem
UIBarItem does not respond to clicks inside UIToolbar which is setup as inputAccessoryView on a UITextField. The button does not show click animation when I try to click it, callback does not get called. My setup looks like: ``` @interface MyViewController() @property (weak, nonatomic) IBOutlet UITextField *closeDateTextField; @property (strong, nonatomic) UIToolbar * datePickerToolbar; @end ``` I setup toolbar with button: ``` - (void)viewDidLoad { self.datePickerToolbar = [[UIToolbar alloc] init]; UIBarButtonItem * doneBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(hidePicker:)]; ``` add button to toolbar and set toolbar as `inputAccessoryView` of `UITextField`: ``` [self.datePickerToolbar setItems:@[doneBtn] animated:NO]; self.closeDateTextField.inputAccessoryView = self.datePickerToolbar; } ``` When I click on `closeDateTextField` the keyboard appears with a `Done` button in toolbar but the button does not respond to click, the `hidePicker:` does not get called. ``` - (void)hidePicker:(id)sender { [self.closeDateTextField resignFirstResponder]; } ``` Any idea what I'm doing wrong?