Подтвердить что ты не робот

Как обнаружить изменения в UIPickerView?

Я хочу обнаружить изменения значения UIPickerView.

Если UIPickerView отвечает на addTarget, я использовал такой код:

-(void) valueChange:(id)sender {
change = YES;

} 

UIPickerView *questionPicker = [[UIPickerView alloc] init]; 
[questionPicker addTarget:self action:@selector(valueChange:) forControlEvents:UIControlEventValueChanged];

Как я могу делать то же самое, но правильно?

4b9b3361

Ответ 1

Если вы посмотрите UIPickerViewDelegate, он имеет:

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component

Просто установите делегат для представления делегатов и выполните это.

Ответ 2

UIPickerViewDelegate имеет pickerView:didSelectRow:inComponent:

Ответ 3

Лучше переопределить эту функцию

public override func selectedRow(inComponent component: Int) -> Int {
  let index = super.selectedRow(inComponent: component)
  //call closure or delegate as you want
  return index
}

в классе UIPickerView, чтобы наблюдать изменения в режиме реального времени.

Ответ 4

Swift 4: Реализация делегатов в представлении выбора:

optional public func pickerView(_ pickerView: UIPickerView, titleForRow row: 
   Int, forComponent component: Int) -> String?

Пример:

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, 
forComponent component: Int) -> String? {
            let value = dummyListArray[row]
            if value == "someText"{
              //Perform Action
            }
            return value
}

Или же

optional public func pickerView(_ pickerView: UIPickerView, didSelectRow row: 
   Int, inComponent component: Int)

Пример:

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, 
inComponent component: Int) {
            let value = dummyListArray[row]
            if value == "someText"{
              //Perform Action
            }        
}