У меня все получилось, хотя я уверен, что мое тестовое приложение намного проще в сравнении, поэтому, надеюсь, структура все еще работает для вас.
По сути, это все, что я сделал. У меня есть UIPickerView
, UIDatePickerView
и UITextField
в IB. dataSource
и delegate
в pickerView связаны с владельцем файла, как и delegate
textField.
В моем заголовке все они объявлены со следующей структурой
UISomething *object;
@property (nonatomic, retain) IBOutlet UISomething *object;
У меня также есть связанные протоколы (<UIPickerViewDelegate, UIPickerViewDataSource, UITextFieldDelegate>
). В файле реализации все синтезировано. Тогда в viewDidLoad
у меня есть это.
- (void)viewDidLoad
{
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;
[datePicker removeFromSuperview];
[pickerView removeFromSuperview];
[super viewDidLoad];
}
Когда textField становится активным, я называю это
- (void)textFieldDidBeginEditing:(UITextField *)textField {
[self.view addSubview:pickerView];
[self.view addSubview:datePicker];
}
Наконец, есть метод действия
- (IBAction)pickerDoneClicked:(id)sender {
[datePicker removeFromSuperview];
[pickerView removeFromSuperview];
[textField resignFirstResponder];
}
Это все работает для меня. Все отображается и удаляется как следует. Так что, если повезет, это тоже поможет вам