Question

Je voudrais afficher un ensemble de nombres consécutifs dans un composant UIPickerView, mais le placer comme un composant identique à celui de la composante secondes de l'application Clock - > Timer. Le seul comportement que je peux activer ressemble au composant Heures de l'application Minuteur, dans lequel vous ne pouvez faire défiler que dans un sens.

Était-ce utile?

La solution

Il est tout aussi facile de définir un nombre élevé de lignes et de le faire démarrer à une valeur élevée. Il y a donc peu de chances que l'utilisateur fasse défiler la molette pendant très longtemps - et même dans ce cas, la Le pire, c’est qu’ils vont toucher le fond.

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
    // Near-infinite number of rows.
    return NSIntegerMax;
}

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
    // Row n is same as row (n modulo numberItems).
    return [NSString stringWithFormat:@"%d", row % numberItems];
}

- (void)viewDidLoad {
    [super viewDidLoad];

    self.pickerView = [[[UIPickerView alloc] initWithFrame:CGRectZero] autorelease];
    // ...set pickerView properties... Look at Apple's UICatalog sample code for a good example.
    // Set current row to a large value (adjusted to current value if needed).
    [pickerView selectRow:currentValue+100000 inComponent:0 animated:NO];
    [self.view addSubview:pickerView];
}

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
    NSInteger actualRow = row % numberItems;
    // ...
}

Autres conseils

J'ai trouvé ma réponse ici:

http://forums.macrumors.com/showthread.php ? p = 6120638 & amp; highlight = UIPickerView # post6120638

Quand il demande le titre d'une ligne, donnez-le: Code:

return [rows objectAtIndex:(row % [rows count])];

Lorsqu'il est indiqué que l'utilisateur didSelectRow: inComponent:, utilise quelque chose comme ceci:

Code:

//we want the selection to always be in the SECOND set (so that it looks like it has stuff before and after)
if (row < [rows count] || row >= (2 * [rows count]) ) {
    row = row % [rows count];
    row += [rows count];
    [pickerView selectRow:row inComponent:component animated:NO];
}

Il semble qu'UIPickerView ne prenne pas en charge le wrapping natif, mais vous pouvez le tromper en insérant davantage de jeux de données à afficher. Lorsque le sélecteur s'arrête, centrez le composant au milieu du jeu de données.

Créez simplement un tableau plusieurs fois, de manière à avoir vos numéros plusieurs fois. Disons quand vouloir avoir les nombres de 0 à 23 et les mettre dans un tableau. que nous ferons 10 fois comme ça ...

NSString *stdStepper;

    for (int j = 0; j<10; j++) {
        for(int i=0; i<24; i++)
        {
            stdStepper = [NSString stringWithFormat:@"%d", i];

            [_hoursArray addObject:stdStepper];

        }
    }

plus tard, nous définissons la ligne 0 sélectionnée comme ceci

[_hoursPickerView selectRow:120 inComponent:0 animated:NO];

Toutes les réponses ne font pas vraiment défiler cycliquement la vue sélecteur.

J'ai créé une tableView cyclique basée sur UIScrollView . Et sur la base de cette table, je réimplémente UIPickerView . Vous pourriez être intéressé par ce DLPickerView . Et cette vue de sélecteur contient toutes les fonctionnalités de UIPickerView , mais offre également de nombreuses nouvelles fonctionnalités, et la personnalisation de cette vue de sélecteur est beaucoup plus simple.

https://github.com/danleechina/DLPickerView

Et sachez que le défilement cyclique de DLPickerView défile réellement. Toute la magie est due à une autre classe DLTableView .

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