Вопрос

Есть ли способ установить значение по умолчанию для выбора? Я сохраняю последнюю выбранную строку из всех сборщиков и хочу, чтобы сборщики загружали эти сохраненные строки при запуске. На данный момент я нашел этот код:

[settingsPagePicker selectRow:3 inComponent:0 animated:YES];

Это работает, но только когда пользователь нажимает на сборщик. Мне нужно, чтобы оно работало при первой загрузке приложения. Если я добавлю этот код в viewDidLoad, приложение рухнет. Кто-нибудь знает, где правильное место, чтобы поместить это в мой код, чтобы он работал?

Спасибо за ваше время!

Это было полезно?

Решение

Проверяли ли вы свой источник данных для settingsPagePicker перед вызовом -selectRow: inComponent: animated, чтобы убедиться, что в этом индексе есть данные (3 в вашем примере кода)?

Как вы загружаете свои данные для своего источника данных? Вы можете сначала инициализировать свой источник данных в viewDidLoad, а затем вызвать selectRow, как только узнаете, что данные доступны.

ОБНОВЛЕНИЕ. Вот как должен выглядеть ваш код или что-то в этом роде:

- (void)viewDidLoad
{
    [super viewDidLoad];
    pickerDataSource = [[NSMutableArray alloc] init];
    [pickerDataSource addObject:@"Item 01"];
    [pickerDataSource addObject:@"Item 02"];
    [pickerDataSource addObject:@"Item 03"];
    [pickerDataSource addObject:@"Item 04"];

    // Might want to move this to -viewWillAppear:animated
    [settingsPagePicker selectRow:3 inComponent:0 animated:YES];
}

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
    if (pickerView == settingsPagePicker)
    {
        return [pickerDataSource objectAtIndex:row];
    }
    return @"";
}

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component 
{
    if (pickerView == settingsPagePicker)
    {
        return [pickerDataSource count];
    }
    return 0;
}

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)thePickerView
{
    return 1;
}

Другие советы

Вот несколько методов из моего класса.

- (void)viewDidLoad {
   [super viewDidLoad];
   currentNumbersOfComponents = 1;
   //[picker selectRow:2 inComponent:0 animated:NO];
}
- (void) viewDidAppear:(BOOL)animated{
   [super viewDidAppear:animated];
   [picker selectRow:2 inComponent:0 animated:YES];
}

#pragma mark picker view data source methods

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{
    return currentNumbersOfComponents;
}

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
    return 5;
}

picker.dataSource самостоятельно

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top