Я не думаю, что вы на самом деле можете сделать цикл UIPickerView, но способ, которым я делал это в прошлом, это вернуть действительно большое число из numberOfRowsInComponent
, а затем вычислить модуль строки, чтобы вернуть соответствующийвид из viewForRow
, например:
// picker data source:
-(NSInteger) pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger) component
{
// to make it look like the picker is looping indefinetly,
// we give it a really large length, and then in the picker delegate we consider
// the row % (actual length) instead of just the row.
return INT16_MAX;
}
// picker delegate:
-(UIView *) pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger) row forComponent:(NSInteger) component reusingView:(UIView *)view
{
// to make it look like the picker is looping indefinetly,
// we give it a really large length in the picker data source, and then we consider
// the row % actual_length instead of just the row.
row = row % actual_length;
// where actual length is the number of options that will be looping
// ... do whatever
}
и в вашей инициализации:
- (void)viewDidLoad {
[super viewDidLoad];
// ... whatever other initialization...
// to make it look like the picker is looping indefinetly ,
// we give it a really large length in the picker data source, and then we consider
// the row % actual_length instead of just the row,
// and we start with the selection right in the middle, rounded to the
// first multiple of actual_length so we start the selection on
// the first option in the list.
[myPicker selectRow:(INT16_MAX/(2*actual_length))*actual_length inComponent:0 animated:NO];
}