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

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

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

(转载请保留此文字:本文来源:[ios开发技巧之]UIPickerView的数据循环显示 http://blog.csdn.net/ipromiseu/article/details/7436521] ,write by Gray.Luo,接受ios/android app 外包开发: [email protected] )

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/


你可能感兴趣的:(※iphone开发)