2015-03-12 10 views
1

Я создаю представление выбора, которое отображается, когда пользователь нажимает на текстовое поле. Он отлично работает. Но я хочу отклонить представление выбора, когда пользователь нажимает на пользовательскую кнопку «Готово». Это мой код до сих пор:Отклонить UIPickerView при нажатии кнопки done

- (void)showPickerWithDoneButton:(UITextField *)sender 
{ 
    UITextField *textField = sender; 

    // Creamos UIPickerView como una vista personalizada de un keyboard View 
    UIPickerView *pickerView = [[UIPickerView alloc] init]; 
    [pickerView sizeToFit]; 
    pickerView.autoresizingMask = (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight); 
    pickerView.delegate = self; 
    pickerView.dataSource = self; 
    pickerView.showsSelectionIndicator = YES; 

    //UIPickerView 

    //Asignamos el pickerview al inputView de nuestro texfield 
    self.tipos_auto.inputView = pickerView; 

    // Preparamos el botón 
    UIToolbar* keyboardDoneButtonView = [[UIToolbar alloc] init]; 
    keyboardDoneButtonView.barStyle = UIBarStyleDefault; 
    keyboardDoneButtonView.translucent = YES; 
    keyboardDoneButtonView.tintColor = nil; 
    [keyboardDoneButtonView sizeToFit]; 

    UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithTitle:   NSLocalizedString(@"Aceptar", @"Button")                     style:UIBarButtonItemStyleBordered target:self                 action:@selector(pickerHechoClicked:)]; 

    doneButton.tintColor = [UIColor blackColor]; 

    //Para ponerlo a la derecha del todo voy a crear un botón de tipo Fixed Space 
    UIBarButtonItem *fixedSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace                     target:nil action:nil]; 

    fixedSpace.width = keyboardDoneButtonView.frame.size.width - 150; 
    [keyboardDoneButtonView setItems:[NSArray arrayWithObjects:fixedSpace, doneButton, nil]]; 

    // Finalmente colocamos la keyboardDoneButtonView en el text field... 
    textField.inputAccessoryView = keyboardDoneButtonView; 
} 

И это метод, который должен отклонить вид сборщика:

-(void) pickerHechoClicked :(id)sender{ 
    [sender resignFirstResponder]; 
} 

Но после нажатия на кнопку сбои приложения с следующей ошибкой:

** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIBarButtonItem resignFirstResponder]: unrecognized selector sent to instance 

Любая помощь приветствуется.

ответ

4

Проще всего сделать, это спросить мнение к завершить все операции редактирования, потому что тогда это не имеет значения, что в настоящее время первым ответчиком на самом деле (так долго, как это подвид где-то):

[self.view endEditing:YES]; 
+0

Хороший совет, спасибо. Он отлично работает – user4619034

+0

А, я не знаю эту функцию UIView. Ницца! –

2

Похоже, вы передаете UIBarButtonItem метод pickerHechoClicked вместо отправки вашего экземпляра UIPickerView.

Когда нажата кнопка «Готово», вы должны передать переменную pickerView в качестве параметра вместо «pickerHechoClicked».

Я не вижу код, где вы на самом деле присвоить свою НАЗН.КНОПКУ сделать действие, но в коде для обработки нажатия кнопок используйте:

[self pickerHechoClicked:pickerView]; 
+0

Спасибо. Но я уверен, что ответ от Wain - лучшее решение. – user4619034

0

Вы не можете назвать resignFirstResponder на вашем UIBarbuttonItem, но к вашему подборщика. Таким образом, простое решение - сохранить ссылку своего выбора, а затем позвонить [self.myPicker resignFirstResponder]

Смежные вопросы