ios开发技巧之UIPickerView的数据循环显示

释放双眼,带上耳机,听听看~!

由于UIPickerView默认并不提供数据的循环显示方法,而我们平时有时候会有需求要求Picker中的数据循环显示,所以我们只能在数据源上面动手脚。

主要需要处理的有以下几个地方:

 

1.UIPickerView的数据源中的行数,我们需要设置一个让用户可以接受的行数 ,也不至于让picker的数据过多而影响拖动效果,比如16384等,让用户看起来是循环显示的效果,当然实际上并不是循环显示,但是这完全可以满足要求:

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
return 16384;
}

2.修改每一行的数据获取的方式,其实就是对我们的数据源数组进行取模而以:

-(UIView *) pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view {
//NSLog(@"start : row %d component %d", row, component);
int fontSize = 36;
CGRect rect = CGRectMake(0.0, 0.0, 200, 50);
if([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad){
rect = CGRectMake(0.0, 0.0, 200, 50);
fontSize = 36;
}else {
rect = CGRectMake(0.0, 0.0, 100, 50);
fontSize = 14;
}
UILabel *myView = [[[UILabel alloc] initWithFrame:rect] autorelease];
myView.textAlignment = UITextAlignmentCenter;
myView.font = [UIFont boldSystemFontOfSize:fontSize];
myView.backgroundColor = [UIColor clearColor];
myView.text = [tmpArray objectAtIndex:row % [tmpArray count]];
// NSLog(@"end:row %d component %d,content:%@", row, component,myView.text );
return myView;
}

 

 

3.第三个就是初始化的时候,让每一列都跳到上面的最大行数的中间,让用户感觉数据是循环的。

- (void)viewDidLoad {
[super viewDidLoad];
for (int i = 0; i < 6; i++) {
[pickerView selectRow:16384/2 inComponent:i animated:NO];
}
}

4.最后一点就是取数据,我们还是按上面的数据源的取值方法一样:

- (IBAction)queryButtonHandle{
NSLog(@"weightArray:%d",[pickerView selectedRowInComponent:0]%[weightArray count]);
NSLog(@"colorArray:%d",[pickerView selectedRowInComponent:1]%[colorArray count]);
NSLog(@"cleanLevelArray:%d",[pickerView selectedRowInComponent:2]%[cleanLevelArray count]);
NSLog(@"cutType1Array:%d",[pickerView selectedRowInComponent:3]%[cutType1Array count]);
NSLog(@"cutType2Array:%d",[pickerView selectedRowInComponent:4]%[cutType2Array count]);
NSLog(@"cutType3Array:%d",[pickerView selectedRowInComponent:5]%[cutType3Array count]);
}

 

通过以上几点就可以给用户呈现一种循环数据的效果,虽然这种方法看上去比较山寨,但是目前也是最简单有效的方法,否则就要去计算每行向上和向下滚动时的情况,然后重新调整数组顺序,然后….反正忒麻烦,要不另一种方法就是自己重写UIPickerView (可以参考http://www.cocoachina.com/bbs/read.php?tid=85374)。

 

参考:http://www.timespace.org/2008/07/11/the-abusive-pickerview/

 

人已赞赏
iOS文章

Xcode插件管理工具Alcatraz

2020-6-15 21:32:12

iOS文章

iOS后台播放音乐

2020-6-16 13:47:14

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
有新消息 消息中心
搜索