[ios开发技巧之]UIPickerView的数据循环显示
2012-04-07 23:42
453 查看
由于UIPickerView默认并不提供数据的循环显示方法,而我们平时有时候会有需求要求Picker中的数据循环显示,所以我们只能在数据源上面动手脚。
主要需要处理的有以下几个地方:
(转载请保留此文字:本文来源:[ios开发技巧之]UIPickerView的数据循环显示 /article/8615446.html]
,write by Gray.Luo,接受ios/android app 外包开发: guohui.great@gmail.com )
1.UIPickerView的数据源中的行数,我们需要设置一个让用户可以接受的行数 ,也不至于让picker的数据过多而影响拖动效果,比如16384等,让用户看起来是循环显示的效果,当然实际上并不是循环显示,但是这完全可以满足要求:
3.第三个就是初始化的时候,让每一列都跳到上面的最大行数的中间,让用户感觉数据是循环的。
4.最后一点就是取数据,我们还是按上面的数据源的取值方法一样:
通过以上几点就可以给用户呈现一种循环数据的效果,虽然这种方法看上去比较山寨,但是目前也是最简单有效的方法,否则就要去计算每行向上和向下滚动时的情况,然后重新调整数组顺序,然后....反正忒麻烦,要不另一种方法就是自己重写UIPickerView (可以参考http://www.cocoachina.com/bbs/read.php?tid=85374)。
参考:http://www.timespace.org/2008/07/11/the-abusive-pickerview/
主要需要处理的有以下几个地方:
(转载请保留此文字:本文来源:[ios开发技巧之]UIPickerView的数据循环显示 /article/8615446.html]
,write by Gray.Luo,接受ios/android app 外包开发: guohui.great@gmail.com )
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开发基础UIPickerView循环显示
- iOS开发-数据选择UIPickerView(案例一)
- iOS开发-数据选择UIPickerView(案例二)
- iOS开发-数据选择UIPickerView(案例三)
- iOS开发-数据选择UIPickerView
- IOS开发学习笔记028-UITableView单组数据显示代码优化
- iOS开发入门之UIPickerView控件的简单使用
- iOS开发之UIPickerView实现城市选择器的步骤详解
- ios开发基础视图 - UIPickerView
- IOS开发之UIPickerView
- 当数据量很少的时候,tableview会显示多余的cell--iOS开发系列---项目中成长的知识二
- iOS开发UI篇—UIPickerView控件简单介绍
- iOS开发 - 第02篇 - UI进阶 - 06 - PickerView & DatePicker
- iOS开发 UIPickerView的使用
- iOS开发中关于没有数据时不显示tableView的分割线
- iOS开发UI篇 -- UIPickerView(省份+城市)
- iOS UIPickerView 显示全国省市
- iOS开发日记48-详解UIPickerView
- IOS开发(3)之UIPickerView控件
- iOS开发-UIPickerView 简单介绍