Jak zawinąć komponent UIPickerView?

Chciałbym pokazać zestaw kolejnych liczb w komponencie UIPickerView, ale niech zawija się jak komponent seconds aplikacji Clock- > Timer. Jedyne zachowanie, które mogę włączyć, wygląda jak komponent hours aplikacji Timer, w którym można przewijać tylko w jednym kierunku.

Author: Pang, 2008-10-18

4 answers

Równie łatwo jest ustawić liczbę wierszy na dużą liczbę i sprawić, że zacznie się od wysokiej wartości, istnieje niewielka szansa, że użytkownik będzie przewijał koło przez bardzo długi czas-a nawet wtedy, gorzej, że trafi na dno.

- (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;
    // ...
}
 45
Author: squelart,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-12-15 03:56:29

Swoją odpowiedź znalazłem tutaj:

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

Gdy zapyta o tytuł wiersza, podaj: Kod:

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

Gdy mówi, że użytkownik nie wybrał: inComponent:, użyj czegoś takiego:

Kod:

//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];
}

Wygląda na to, że UIPickerView nie obsługuje owijania natywnie, ale można go oszukać, wstawiając więcej zestawów danych do wyświetlenia i gdy selektor zatrzymuje się, wyśrodkowując komponent do środka zestawu danych.

 20
Author: David,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-18 07:47:42

Po prostu utwórz tablicę wiele razy, tak, że masz swoje liczby wiele razy. Powiedzmy, kiedy chcesz mieć liczby od 0 do 23 i umieścić je w tablicy. że zrobimy to 10 razy...

NSString *stdStepper;

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

            [_hoursArray addObject:stdStepper];

        }
    }

Później ustawiamy wiersz 0 wybrany w ten sposób

[_hoursPickerView selectRow:120 inComponent:0 animated:NO];
 0
Author: user2912794,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-24 21:45:55

Wszystkie odpowiedzi nie sprawiają, że picker view scroll cyklicznie.

Zrobiłem cykliczny widok tableView na podstawie UIScrollView. I na podstawie tego widoku tableView, ponownie zaimplementuję UIPickerView. Może cię to zainteresować DLPickerView. I ten widok wyboru ma wszystkie funkcje, które UIPickerView ma, ale także daje wiele nowych funkcji, a Niestandardowy ten widok wyboru jest znacznie łatwiejszy.

Https://github.com/danleechina/DLPickerView

I należy pamiętać, że ten DLPickerView cyklicznie zwój jest naprawdę przewijanie cykliczne. Cała magia miała miejsce z powodu innej klasy DLTableView.

 0
Author: Dan Lee,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-14 06:35:08