UIPickerView的完美使用 基于视图的选取器
关于这个,其实在许多的项目开发中,还是有很多必要的,因为,你要实现一个图片说明,而不需要文字的话,这个就是个关键点,使用图标来做选择项。
原理其实也是很简单的,只要在-(UIView *) pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view
实现对每个Component中的row进行uiview的操作就好了。
1 2 3 4 5 6 7 8 9 10 11 12 13 -(UIView *) pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger )row forComponent:(NSInteger )component reusingView:(UIView *)view{ UIImageView *imageView; imageView = view ? (UIImageView *)view : [[UIImageView alloc] initWithFrame:CGRectMake (0.0 f, 0.0 f, 60.0 f, 60.0 f)]; NSArray *names = [NSArray arrayWithObjects:@"club.png" , @"diamond.png" , @"heart.png" , @"spade.png" , nil ]; imageView.image = [UIImage imageNamed:[names objectAtIndex:(row % 4 )]]; CFShow ((__bridge CFTypeRef )(imageView.image)); return imageView; }
是不是很简单,其实UIPickerView里面已经自己的设置了这个方法,很是方便。
代码呈现如下:
ViewBasedPickerViewController.m
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 #import "ViewBasedPickerViewController.h" @interface ViewBasedPickerViewController ()@end @implementation ViewBasedPickerViewController - (void )viewDidLoad { [super viewDidLoad]; srandom([NSDate timeIntervalSinceReferenceDate]); self .navigationController.navigationBar.tintColor = COOKBOOK_PURPLE_COLOR; self .navigationItem.rightBarButtonItem = BARBUTTON(@"操作" , @selector (action:)); } - (void )didReceiveMemoryWarning { [super didReceiveMemoryWarning]; } #pragma mark - method of uipickerview -(NSInteger ) numberOfComponentsInPickerView:(UIPickerView *)pickerView{ return 3 ; } -(NSInteger ) pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger )component{ return 1000000 ; } -(CGFloat ) pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger )component{ return 100.0 f; } -(UIView *) pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger )row forComponent:(NSInteger )component reusingView:(UIView *)view{ UIImageView *imageView; imageView = view ? (UIImageView *)view : [[UIImageView alloc] initWithFrame:CGRectMake (0.0 f, 0.0 f, 60.0 f, 60.0 f)]; NSArray *names = [NSArray arrayWithObjects:@"club.png" , @"diamond.png" , @"heart.png" , @"spade.png" , nil ]; imageView.image = [UIImage imageNamed:[names objectAtIndex:(row % 4 )]]; CFShow ((__bridge CFTypeRef )(imageView.image)); return imageView; } #pragma mark - method of uiactionsheet -(void )actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger )buttonIndex{ UIPickerView *pickerView = (UIPickerView *)[actionSheet viewWithTag:101 ]; NSArray *names = [NSArray arrayWithObjects:@"C" ,@"D" ,@"H" ,@"S" , nil ]; self .title = [NSString stringWithFormat:@"%@•%@•%@" , [names objectAtIndex:([pickerView selectedRowInComponent:0 ] % 4 )], [names objectAtIndex:([pickerView selectedRowInComponent:1 ] % 4 )], [names objectAtIndex:([pickerView selectedRowInComponent:2 ] % 4 )] ]; } #pragma mark - method of self -(void ) action:(id ) sender{ NSString *title = UIDeviceOrientationIsLandscape ([UIDevice currentDevice].orientation) ? @"\n\n\n\n\n\n\n\n\n" : @"\n\n\n\n\n\n\n\n\n\n\n\n" ; UIActionSheet *actionsheet = [[UIActionSheet alloc] initWithTitle:title delegate:self cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles:@"请选择" , nil ]; [actionsheet showInView:self .view]; UIPickerView *pickerView = [[UIPickerView alloc] init]; pickerView.tag = 101 ; pickerView.delegate = self ; pickerView.dataSource = self ; pickerView.showsSelectionIndicator = YES ; [actionsheet addSubview:pickerView]; [pickerView selectRow:50000 + (random() % 4 ) inComponent:0 animated:YES ]; [pickerView selectRow:50000 + (random() % 4 ) inComponent:1 animated:YES ]; [pickerView selectRow:50000 + (random() % 4 ) inComponent:2 animated:YES ]; CFShow ((__bridge CFTypeRef )(NSStringFromCGRect (pickerView.frame))); } @end
ViewBasedPickerViewController.h
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 #import <UIKit/UIKit.h> #define COOKBOOK_PURPLE_COLOR [UIColor colorWithRed:0.20392f green:0.19607f blue:0.61176f alpha:1.0f] #define BARBUTTON(TITLE, SELECTOR) [[UIBarButtonItem alloc] initWithTitle:TITLE style:UIBarButtonItemStylePlain target:self action:SELECTOR] @interface ViewBasedPickerViewController : UIViewController <UIPickerViewDelegate , UIPickerViewDataSource , UIActionSheetDelegate >@end
此例子中使用的是storyboard