I am just trying out which is better with regards to dismissing a UIPickerView
-- a button on the navigation bar or a "Done" button on a toolbar above the picker view. I have implemented both buttons, and I am trying to dismiss the picker view and resign first responder.
How can I dismiss the UIPickerView
with the "Done" Button on the toolbar?
This is my code for the UIToolBar
:
UIToolbar* keyboardDoneButtonView = [[UIToolbar alloc] init];
keyboardDoneButtonView.barStyle = UIBarStyleBlack;
keyboardDoneButtonView.translucent = YES;
keyboardDoneButtonView.tintColor = nil;
[keyboardDoneButtonView sizeToFit];
UIBarButtonItem* doneButton = [[[UIBarButtonItem alloc] initWithTitle:@"Done"
style:UIBarButtonItemStyleBordered target:self
action:@selector(pickerDoneClicked:)] autorelease];
[keyboardDoneButtonView setItems:[NSArray arrayWithObjects:doneButton, nil]];
textField.inputAccessoryView = keyboardDoneButtonView;
Could someone help me with this?
Or if you want to dismiss it with an animation, change the view frame with UIView animations and then remove it from superview.
where outOfScreenFrame is somewhere outside your UIApplication window.
In Swift
UITextFieldDelegate
I got it working on my end, though I'm sure my test app is much much simpler in comparison, so hopefully the structure still works for yours.
In essence, this is all I did. I have a
UIPickerView
,UIDatePickerView
, andUITextField
set up in IB. The pickerView'sdataSource
anddelegate
are both linked to File's Owner, as is thedelegate
of the textField.In my header, I have them all declared with the following structure
I've also got the protocols linked (
<UIPickerViewDelegate, UIPickerViewDataSource, UITextFieldDelegate>
). In the implementation file, everything is synthesized. Then inviewDidLoad
, I have this.When the textField becomes active, I call this
Then finally, there's the action method
This all works for me. Everything gets displayed and removed as it should. So with any luck, this will do the trick for you too