Question

Est-il possible de définir une valeur par défaut pour un sélecteur? Je sauvegarde la dernière ligne sélectionnée parmi tous les sélecteurs et je souhaite que les sélecteurs chargent ces lignes enregistrées au démarrage. A partir de maintenant, j'ai trouvé ce code:

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

Cela fonctionne, mais uniquement lorsque l'utilisateur appuie sur le sélecteur. J'ai besoin que cela fonctionne lorsque l'application est chargée pour la première fois. Si je mets ce code à viewDidLoad, l'application va se bloquer. Quelqu'un sait où est le bon endroit pour mettre cela dans mon code pour le faire fonctionner?

Merci pour votre temps!

Était-ce utile?

La solution

Avez-vous vérifié le paramètre settingsPagePicker dans votre source de données avant d'appeler -selectRow: inComponent: animated pour vous assurer que des données sont disponibles au niveau de cet index (3 dans votre exemple de code)?

Comment chargez-vous vos données pour votre source de données? Vous pouvez d’abord initialiser votre source de données dans viewDidLoad, puis appeler selectRow une fois que vous savez que des données sont disponibles.

UPDATE: voici à quoi votre code devrait ressembler ou quelque chose du genre:

- (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;
}

Autres conseils

Voici quelques méthodes de ma classe.

- (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 est autonome

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top