2016-02-11 17 views
1

Я работаю в Xcode 7 с помощью Swift 2.Обновление TextField при выборе опции выбора/закрытия UIPickerView без кнопки?

У меня есть настройка UIPickerViews в текстовых полях, и все они работают так, как должны. Я закрыть pickerviews с помощью:

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 

    pickerOptions.resignFirstResponder() 
    (etc.) 
} 

Моя проблема заключается в том, что у меня есть один pickerview, что я хочу быть в меню «Presets», который будет обновлять 3 регулярные входы TextField с набором значений, выбрав значение pickerview без необходимо обновить значения с помощью кнопки. Я не совсем уверен, как это сделать, поскольку я еще не очень хорошо знаком с делегатами (если это даже связано с ними). Я действительно теряюсь в том, как обновлять/обновлять ViewController.

Я предположил бы, что у него есть что-то делать с textFieldDidEndEditing (так как у меня есть эти классы уже установки от настройки UIPickerView: UIPickerViewDataSource, UIPickerViewDelegate, UITextFieldDelegate) Любая помощь приветствуется :)

ответ

0

Вы могли бы реализовать делегат метод:

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component 
{ 
    //put your code here 
} 

относящийся к протоколу UIPickerViewDelegate.

Чтобы просмотреть документацию по протоколу XCode option + щелкните по имени протокола.

1

Это все о делегатах. Я понимаю, что у вас есть pickerView, который должен устанавливать содержимое некоторых текстовых полей при выборе пользователя. PickerView - это объект запаса, который должен рассказать вашему классу, что происходит, не зная ничего конкретного о вашем классе. Он делает это, говоря, что если вы реализуете этот протокол, который я определяю, я буду называть ваши функции, чтобы вы знали. В случае pickerView соответствующий протокол равен UIPickerViewDelegate, и он предоставляет свойство под названием delegate, которое может быть установлено только объекту, реализующему протокол. Если делегат pickerView установлен, он будет вызывать функцию pickerView:didSelectRow:inComponent: объекта, когда пользователь прокручивает pickerView.

Вам просто нужно создать объект, который будет соответствовать протоколу UIPickerViewDelegate, и соответственно установить свойство delegate pickerView. Чаще всего вы будете просто добавить эту способность к вашему ViewController, вдоль линий:

class viewController: UIViewController, UIPickerViewDelegate { 
    func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 
     // Now you can update the textField(s) 
    } 
} 

Обратите внимание, что определение pickerView:didSelectRow:inComponent: помечается как опция. Это означает, что если вы говорите, что вы реализуете UIPickerViewDelegate, но не определяете его, компилятор не даст вам знать. Это может сбивать с толку, если вы случайно ошибаетесь или получаете подпись неправильно - вы подумаете, что она определена, но она никогда не будет вызвана.

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