UIPicker selectRow не работает - что не так с этим кодом? - PullRequest
7 голосов
/ 13 сентября 2011

Я пытаюсь установить значение по умолчанию для UIPickerView.Тем не менее, независимо от того, какое значение я установил, по умолчанию оно всегда равно 1. Приведенный ниже метод прекрасно загружает средство выбора, и я могу выбрать его.Итак, что я делаю не так?Вот код

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.

    arrayNo = [[NSMutableArray alloc] init];
    [arrayNo addObject:@" 1 "];
    [arrayNo addObject:@" 2 "];
    [arrayNo addObject:@" 3 "];
    [arrayNo addObject:@" 4 "];
    [arrayNo addObject:@" 5 "];

    [pickerView selectRow:4 inComponent:0 animated:YES];
    mlabel.text= [arrayNo objectAtIndex:[pickerView selectedRowInComponent:0]];    

}

Методы источника данных сборщика:

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

    mlabel.text = [arrayNo objectAtIndex:row];
    NSNumberFormatter * f = [[NSNumberFormatter alloc] init];

    [f setNumberStyle:NSNumberFormatterDecimalStyle];

    NSNumber * myNumber = [f numberFromString:[arrayNo objectAtIndex:row]];

    [f release];

    prefs = [NSUserDefaults standardUserDefaults];

    NSInteger myInteger = [myNumber integerValue];


    // save level
    [prefs setInteger:myInteger forKey:@"myInt"];

    // saving it all
    [prefs synchronize];


}

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component;
{
    return [arrayNo count];
}

Ответы [ 7 ]

7 голосов
/ 16 сентября 2011

Это работает, если я скажу это так:

-(void) viewWillAppear: (BOOL) animated
5 голосов
/ 13 сентября 2011

Вам может потребоваться вызвать reloadAllComponents после заполнения массива и перед попыткой выбрать строку.Сборщик может еще не знать ваш новый номер элементов.

2 голосов
/ 30 сентября 2011

Выполните следующие шаги

  • загрузите массив перед инициализацией средства выбора.
  • вызов [pickerView selectRow: 4 inComponent: 0 animated: YES];
  • вызов [pickerView reloadAllComponents];

В последних заметках о выпуске apple яблоки говорят: «В iOS 5.0 UIPickerView не отправляет свой pickerView: didSelectRow: inComponent: сообщение делегата из-за программного выбора».Поэтому нам нужно принудительно вызывать relayodAppComponents ..

Дать подтверждение, если его работа ...

1 голос
/ 02 августа 2017

Это потому, что вам нужно установить источник данных в viewdidload, иначе, если вы установите его из раскадровки, он будет загружен после viewWillAppear.

0 голосов
/ 20 мая 2019

Для меня сработало делегирование вызова didSelectRow:

self.pickerView.delegate?.pickerView?(self.providerPickerView, didSelectRow: 0, inComponent: 0)
0 голосов
/ 13 сентября 2011

Что делает arrayNo?Используется ли он для заполнения UIPickerView?Если это так, вам придется [pickerView reloadAllComponents] перед звонком selectRow:inComponent:animated:

0 голосов
/ 13 сентября 2011
  • мы не видим, как настроить источник данных для средства выбора
  • вы делаете анимированный selectRow в viewDidLoad (этого представления еще нет на экране ...)

Вы пробовали с анимацией: НЕТ?

...