你如何使UIPickerView组件环绕?

我想在一个UIPickerView组件中显示一组连续的数字,但要像Clock-> Timer应用程序的秒组件那样将其包装起来。 我可以启用唯一的行为看起来像定时器应用程序的小时组件,在那里你可以只向一个方向滚动。

将行数设置为大数就很容易,并且使其开始于高值,用户很less有机会长时间滚动轮 – 即使如此,更糟的是,发生的是他们会触底。

- (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; // ... } 

我在这里find了我的答案:

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

当它要求一个行的标题,给它:代码:

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

当它说用户didSelectRow: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不支持本地包装,但是你可以通过插入更多的数据集来显示,当select器停止时,将组件集中到数据集的中间。

只需多次创build一个数组,以便多次使用您的数字。 可以说,当要从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]; 

所有的答案都没有真正使select器视图循环滚动。

我做了一个基于UIScrollView的循环tableView。 并基于这个tableView,我重新实现了UIPickerView 。 您可能对此DLPickerView感兴趣。 而这个select器视图具有UIPickerView具有的所有function,但也提供了许多新function,而且这个select器视图的自定义要容易得多。

https://github.com/danleechina/DLPickerView

而且请注意,这个DLPickerView循环滚动实际上是循环滚动的。 所有的魔法都是因为另一个类DLTableView发生的。