2011-06-28 4 views
4

Я просто стараюсь, чтобы было лучше, если убрать UIPickerView - кнопку на панели навигации или кнопку «Готово» на панели инструментов над видом подборщика. Я реализовал обе кнопки, и я пытаюсь отклонить представление выбора и уйти с первого ответчика.Отклонение UIPickerView с помощью кнопки «Готово» на UIToolBar

Как я могу уволить UIPickerView с помощью кнопки «Готово» на панели инструментов?

Это мой код 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; 

Может кто-нибудь помочь мне с этим?

+1

Без попробовав это сам: Что именно Ваш вопрос/проблема? Выборщик не исчезает? Если это не сработает, вы можете анимировать его вниз вручную и вызвать removeFromSuperview. Имеет ли это смысл? –

+0

Я собираюсь попытаться воспроизвести это, если это возможно. если я смогу получить рабочий код, я поделюсь тем, что у меня есть. – justin

+0

@slev: Спасибо, человек. – Legolas

ответ

22

Я получил его работу на моем конце, хотя я уверен, что мое тестовое приложение намного проще в сравнении, поэтому, надеюсь, структура по-прежнему работает на вас.

В сущности, это все, что я сделал. У меня есть UIPickerView, UIDatePickerView и UITextField, установленные в IB. dataSource и delegate убираются вместе с владельцем файла, как и delegate текстового поля.

В моей голове, я их все заявленные со следующей структурой

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]; 
} 

Это все работает для меня. Все будет отображаться и удаляться как следует. Так что, если повезет, это будет делать трюк для вас слишком

+0

Спасибо большое! – Legolas

+0

проблем нет. я рад, что это помогло вам – justin

+0

Спасибо, слишком slev .. Это сработало и для меня. +1 –

2
-(void)pickerDoneClicked:(id)sender { 
    [pickerView removeFromSuperview]; 
} 

Если вы хотите удалить его с помощью анимации, измените рамку просмотра с анимацией UIView и удалите ее из супервизора.

[UIView beginAnimations:nil context:nil]; 
[UIView setAnimationDuration:0.5]; 
[UIView setAnimationDelay:1.0]; 
[UIView setAnimationCurve:UIViewAnimationCurveEaseOut]; 

pickerView.frame = outOfScreenFrame; 

[UIView commitAnimations]; 

где outOfScreenFrame находится где-то вне окна UIApplication.

+0

Я пробовал это. Я получаю ошибку Нераспознанный селектор, отправленный в экземпляр «1290837» – Legolas

+0

Не уверен, что вы сделали неправильно, поскольку я не вводил ваш код точно так же, как это сделал slev, но, надеюсь, вам удалось это понять! :) –

2

В Swift

lazy var inputToolbar: UIToolbar = { 
    var toolbar = UIToolbar() 
    toolbar.barStyle = .Default 
    toolbar.translucent = true 
    toolbar.sizeToFit() 

    var doneButton = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.Bordered, target: self, action: "inputToolbarDonePressed") 
    var spaceButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FlexibleSpace, target: nil, action: nil) 

    toolbar.setItems([spaceButton, doneButton], animated: false) 
    toolbar.userInteractionEnabled = true 

    return toolbar 
}() 

func inputToolbarDonePressed() { 
    view.endEditing(true) 
} 

UITextFieldDelegate

func textFieldShouldBeginEditing(textField: UITextField) -> Bool { 
    textField.inputAccessoryView = inputToolbar 

    return true 
} 
Смежные вопросы