Я хотел бы показать набор последовательных чисел в компоненте UIPickerView, но обернуть его, как компонент секунд приложения Clock- > Timer. Единственное, что я могу включить, выглядит как компонент часов приложения Timer, где вы можете прокручивать только в одном направлении.
Как вы обмениваете компонент UIPickerView?
Ответ 1
Так же легко установить количество строк на большое количество и заставить его начинать с большого значения, мало шансов, что пользователь будет прокручивать колесо в течение очень долгого времени. И даже тогда, Хуже того, что это произойдет, так это то, что они снизятся.
- (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 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;
// ...
}
Ответ 2
Я нашел здесь свой ответ:
http://forums.macrumors.com/showthread.php?p=6120638&highlight=UIPickerView#post6120638
Когда он запрашивает заголовок строки, дайте ему: Код:
return [rows objectAtIndex:(row % [rows count])];
Когда говорится, что пользователь сделалSelectRow: inComponent:, используйте что-то вроде этого:
код:
//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];
}
Похоже, что UIPickerView не поддерживает обход вокруг изначально, но вы можете обмануть его, вставив больше наборов данных, которые будут отображаться, и когда сборщик остановится, центрируя компонент до середины набора данных.
Ответ 3
Просто создайте массив несколько раз, чтобы у вас были ваши номера несколько раз. Предположим, когда хотите, чтобы числа от 0 до 23 и помещали их в массив. что мы будем делать 10 раз, как это...
NSString *stdStepper;
for (int j = 0; j<10; j++) {
for(int i=0; i<24; i++)
{
stdStepper = [NSString stringWithFormat:@"%d", i];
[_hoursArray addObject:stdStepper];
}
}
позже мы устанавливаем строку 0, выбранную следующим образом
[_hoursPickerView selectRow:120 inComponent:0 animated:NO];
Ответ 4
Все ответы действительно не делают циклическую прокрутку в режиме выбора.
Я сделал циклический tableView на основе UIScrollView
. И на основе этого tableView я повторно реализую UIPickerView
. Вас может заинтересовать этот DLPickerView
. И это представление выбора имеет все функции, которые UIPickerView
имеет, но также дает много новых функций, и пользовательский вид этого сборщика намного проще.
https://github.com/danleechina/DLPickerView
И помните, что этот циклический свиток DLPickerView
циклически циклически прокручивается. Вся магия произошла из-за другого класса DLTableView
.