Chciałbym pokazać zestaw kolejnych liczb w składniku UIPickerView, ale powinien on owijać się jak składnik sekundowy aplikacji Zegar-> Timer. Jedyne zachowanie, jakie mogę włączyć, wygląda jak komponent godziny w aplikacji Timer, w którym można przewijać tylko w jednym kierunku.Jak utworzyć zawijanie komponentu UIPickerView?
Odpowiedz
Równie łatwo jest ustawić liczbę wierszy na dużą liczbę i zacząć od wysokiej wartości, istnieje małe prawdopodobieństwo, że użytkownik kiedykolwiek przewinie koła przez bardzo długi czas - A nawet wtedy, Najgorsze, co się stanie, to to, ż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;
// ...
}
znalazłem moją odpowiedź tutaj:
http://forums.macrumors.com/showthread.php?p=6120638&highlight=UIPickerView#post6120638
Kiedy pyta o tytuł z rzędu, dać go: Kod:
return [rows objectAtIndex:(row % [rows count])];
Kiedy mówi didSelectRow użytkownik: 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 wokół natywnie, ale można oszukać go, wstawiając więcej zestawów danych do wyświetlenia i po zatrzymaniu selektora, ustawiając środek na środku zbioru danych.
niesamowite! dzięki za tonę !! dobre rozwiązanie było naprawdę pomocne – user1046037
Po prostu utwórz tablicę kilka razy, aby mieć wiele numerów. Powiedzmy, kiedy chcemy mieć liczby od 0 do 23 i umieścić je w tablicy. że będziemy robić 10 razy tak ...
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 ustawić wybrany wiersz 0 jak to
[_hoursPickerView selectRow:120 inComponent:0 animated:NO];
Wszystkie odpowiedzi nie są tak naprawdę czyni widok kompletacji zwój cyklicznie.
Zrobiłem cykliczny tableView na podstawie UIScrollView
. I na podstawie tego tableView, ponownie implementuję UIPickerView
. Możesz być zainteresowany tym DLPickerView
. Ten widok selektora ma wszystkie funkcje, które ma UIPickerView
, ale daje również wiele nowych funkcji, a niestandardowy widok tego sortowania jest znacznie łatwiejszy.
https://github.com/danleechina/DLPickerView
i mieć świadomość, że ten DLPickerView
cyklicznie przewijania jest naprawdę przewijanie cyklicznie. Cała magia powstała z powodu innej klasy DLTableView
.
To działało dla mnie dobrze! Dzięki. Czy są jednak jakieś problemy z wydajnością/pamięcią? – Dimitris
Nie powinno być żadnych problemów związanych z wydajnością/pamięcią w porównaniu z listą bez zawijania, ponieważ struktura nie zatrzymuje przewijanych elementów w pamięci. W razie wątpliwości użyj profilera! – squelart
W ten sposób aplikacja Clock implementuje 'looping'.NSIntegerMax –