Ответ 1
Если вы посмотрите UIPickerViewDelegate, он имеет:
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
Просто установите делегат для представления делегатов и выполните это.
Я хочу обнаружить изменения значения UIPickerView.
Если UIPickerView отвечает на addTarget, я использовал такой код:
-(void) valueChange:(id)sender { change = YES; } UIPickerView *questionPicker = [[UIPickerView alloc] init]; [questionPicker addTarget:self action:@selector(valueChange:) forControlEvents:UIControlEventValueChanged];
Как я могу делать то же самое, но правильно?
Если вы посмотрите UIPickerViewDelegate, он имеет:
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
Просто установите делегат для представления делегатов и выполните это.
UIPickerViewDelegate
имеет pickerView:didSelectRow:inComponent:
Лучше переопределить эту функцию
public override func selectedRow(inComponent component: Int) -> Int {
let index = super.selectedRow(inComponent: component)
//call closure or delegate as you want
return index
}
в классе UIPickerView, чтобы наблюдать изменения в режиме реального времени.
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
}
}