it-swarm.com.de

Wie lässt sich eine UIPickerView-Komponente umbrechen?

Ich möchte eine Reihe von fortlaufenden Nummern in einer UIPickerView-Komponente anzeigen, aber ich möchte, dass diese wie die Sekunden-Komponente der Anwendung Clock-> Timer umbrochen wird. Das einzige Verhalten, das ich aktivieren kann, sieht aus wie die Stunden-Komponente der Timer-Anwendung, in der Sie nur in eine Richtung scrollen können.

39
David

Es ist genauso einfach, die Anzahl der Zeilen auf eine große Anzahl zu setzen und es mit einem hohen Wert zu beginnen. Es ist unwahrscheinlich, dass der Benutzer das Rad für eine sehr lange Zeit scrollen wird Es kommt vor, dass sie den Boden erreichen.

- (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
squelart

Ich habe meine Antwort hier gefunden:

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

Wenn Sie nach dem Titel einer Zeile gefragt werden, geben Sie Folgendes ein: Code:

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

Wenn der Benutzer didSelectRow: inComponent: sagt, verwenden Sie Folgendes:

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

Es scheint, dass UIPickerView das native Umbrechen nicht unterstützt. Sie können es jedoch täuschen, indem Sie weitere Datensätze einfügen, die angezeigt werden sollen. Wenn der Picker stoppt, zentrieren Sie die Komponente in der Mitte des Datensatzes.

21
David

Alle Antworten lassen die Picker-Ansicht nicht wirklich zyklisch blättern.

Ich habe eine zyklische tableView basierend auf UIScrollView erstellt. Und basierend auf dieser tableView implementiere ich UIPickerView neu. Sie könnten an dieser DLPickerView interessiert sein. Diese Auswahlansicht hat alle Funktionen, die UIPickerView bietet, bietet aber auch viele neue Funktionen, und die Auswahl dieser Ansicht ist viel einfacher. 

https://github.com/danleechina/DLPickerView

Und beachten Sie, dass diese DLPickerView zyklisch scrollt wirklich zyklisch scrollt. Die ganze Magie geschah aufgrund einer anderen Klasse DLTableView.

0
Dan Lee

Erstellen Sie einfach ein Array mehrmals, so dass Sie mehrmals Ihre Zahlen haben. Lasst uns sagen, wann die Zahlen von 0 bis 23 sein sollen, und setzen Sie diese in ein Array. dass wir 10 mal so machen ...

NSString *stdStepper;

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

            [_hoursArray addObject:stdStepper];

        }
    }

später setzen wir die so ausgewählte Zeile 0

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