Как обнаружить изменения в UIPickerView? - PullRequest
25 голосов
/ 02 апреля 2010

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

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

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

} 

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

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

Ответы [ 4 ]

56 голосов
/ 02 апреля 2010

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

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

Просто установите ваш делегат выбора представлений и реализуйте это.

6 голосов
/ 02 апреля 2010

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

1 голос
/ 24 мая 2019

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
            }        
}
1 голос
/ 07 марта 2019

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

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

в UIPickerView класс для наблюдения за изменениями в реальном времени.

...