Это может быть "взлом", но это работает. Мой случай немного отличается. Я использую один UIPicker
, но могу изменить какой объект это манипуляция.
Моя проблема заключалась в том, что вы могли выбрать один объект, вращать сборщик и, пока он заканчивает вращение, выбрать другой объект. В итоге получилось, что новый объект получил окончательное значение этого вращения, а не был проигнорирован.
Что я сделал, что при настройке UIPicker
я бы дал ему уникальный tag
на основе объекта, который он должен был обновить.
- (void)updatePickerView:(UIPickerView*)pickerView
{
...
pickerView.tag = [self.myObject.position integerValue];
[pickerView selectRow:i inComponent:0 animated:NO];
}
Затем, когда он заканчивает вращение, я проверяю, чтобы тег выровнялся по-прежнему.
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
if (pickerView.tag == [self.myObject.position integerValue]) {
...
}
}
Я не уверен, как он работает на стороне Apple, но этого было достаточно, чтобы заставить его работать на меня.
В качестве примечания, и я не уверен, имеет ли это значение, но мой UIPicker
находится в UITableViewCell
, но так как это многоразовая ячейка, и поскольку у меня были проблемы, которыми я был, я предполагаю UIPicker одинаков при перемещении из одной позиции в другую (поскольку на экране одновременно только одна).