UIPicker selectRow
Я пытаюсь выбрать первый ряд по умолчанию.. Здесь я пытался
-(void)pickerViewLoaded{
[pickerView setShowSelectionIndicator:YES];
pickerView.delegate = self;
[pickerView reloadAllComponents];
[pickerView selectRow:1 inComponent:0 animated:YES]
}
Он прекрасно работает, когда я вызываю этот метод для viewDidLoad(), который вызывает метод didSelectRow, но он выбирает вторую строку этого компонента, а не первую. когда я вызываю с помощью [pickerView selectRow:0 inComponent:0 animated:YES], тогда он никогда не вызывает метод didSelectRow.
Другая проблема заключается в том, что когда я вызываю метод pickerViewLoaded при выборе сегментированного элемента управления, он не вызывает метод didSelectRow. я до сих пор не могу понять, когда он может вызвать с viewDidLoad, почему бы не с segmentedControl.
Спасибо всем,
3 ответа
Кажется, старая нить, во всяком случае, я подумал поделиться своим опытом.
У меня была такая же проблема и переехал
[pickerView selectRow:0 inComponent:0 animated:YES];
в
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component;
Я вызываю selectRow:inComponent:animated только после возвращения titleForRow, вызванного для последней строки, с использованием уведомления.
Я просто столкнулся с той же проблемой и понял: делегат не будет вызван, если выбранная строка не изменится. Кроме того, строка 0 выбрана по умолчанию, поэтому повторно выбирая строку 0 в viewDidLoad
не вызывает делегата. В моем случае я смог вызвать метод делегата напрямую, возможно, это решение и в вашем случае.
Теперь, когда вопрос был поднят из мертвых...
Я думаю, что selectRow использует индекс, который начинается с 0, а не с 1. Итак, 0 - это первая строка, а 1 - вторая строка.