UIPickerView: ultimo valore seguito da primo valore
-
18-09-2019 - |
Domanda
Qualcuno mi può aiutare come fare l'UIPickerView visualizza il valore del primo fila dopo il valore dell'ultima fila, proprio come l'UIDatePicker dove dopo 12 il 1 seguirà.
Grazie
Soluzione
Non credo che la sua possibile rendere davvero circolare, ma si può fingere.
#define kRowsInPicker 10000
- (void)viewDidLoad {
NSArray *localPickerData = [[NSArray alloc] initWithObjects:
@"Ottawa", @"Toronto", @"Montreal", @"Winnipeg",
@"Saskatchewan", @"Iqaluit", @"Edomonton", nil];
[self setPickerData:localPickerData];
[localPickerData release];
UIPickerView *localPicker = [[UIPickerView alloc] initWithFrame:
CGRectMake(0, 0, 320, 216)];
[localPicker setDelegate:self];
[localPicker setDataSource:self];
localPicker.showsSelectionIndicator = YES;
NSInteger selectedRow = 0;
[localPicker selectRow:(((NSInteger)((kRowsInPicker / 2) / [pickerData count])) * [pickerData count]) + (selectedRow%[pickerData count]) inComponent:0 animated:NO];
[self setPicker:localPicker];
[localPicker release];
[[self view] addSubview:picker];
[super viewDidLoad];
}
#pragma mark -
#pragma mark UIPickerViewDataSource methods
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
return 1;
}
- (NSInteger)pickerView:(UIPickerView *)pickerView
numberOfRowsInComponent:(NSInteger)component {
// usually "return [pickerData count];"
return kRowsInPicker; // 10,000 is good, if you add a few more zeros
// there seems to be problems.
}
#pragma mark -
#pragma mark UIPickerViewDelegate methods
- (NSString *)pickerView:(UIPickerView *)pickerView
titleForRow:(NSInteger)row forComponent:(NSInteger)component {
return [pickerData objectAtIndex:row%[pickerData count]];
}
È possibile modificare il numero di stringhe in pickerData e sarà ancora funzionare bene. La riga selezionata seleziona la "prima" valore più vicino al centro. riga% [count pickerData] restituisce i seguenti ci sono assumendo 3 NSStrings in pickerData:
ROW RETURNS 0 0 1 1 2 2 3 0 4 1 5 2 6 0 7 1 8 2 etc...Sarà solo ciclo 0 attraverso la lunghezza della matrice. La roba confusa in viewDidLoad solo seleziona un valore più vicino possibile al centro possibile utilizzando l'indice della voce della matrice che fornisci in selectedItem . Non v'è alcun calo di prestazioni o di perdita di memoria, tutto quello che hai assegnato è il singolo array. Ogni volta che si accede la loro scelta selezionato, utilizzare ([localPicker selectedRowInComponent: 0]% [count pickerData]). Se c'è qualcosa che non capisci o qualcosa mi mancava, si prega di commento. Spero che questo ha aiutato!
Altri suggerimenti
Ho fatto un tableView ciclica basata su UIScrollView
. E sulla base di questo tableView, ho re-implementare UIPickerView
. Si potrebbe essere interessato a questo DLPickerView
. E questo punto di vista raccoglitrice ha tutte le caratteristiche che ha UIPickerView
, ma dà anche molte nuove caratteristiche, e questo punto di vista personalizzato selettore è molto più facile.
https://github.com/danleechina/DLPickerView
Ed essere consapevoli di che questo DLPickerView
scorrimento ciclicamente è davvero scorre ciclicamente. Tutta la magia è accaduto a causa di un altro DLTableView
classe.