IOS中的各种Picker

简述

在应用的一些设置中经常要用到一些Picker来快速帮助用户选定取值,一般会用到的有UIDatePicker,UIPickerView以及UIImagePickerController。
初始界面
如图,在搭建好的界面,实现方法来完成各个选择。首先是日期选择

UIDatePicker

主要需要设置的属性有
locale
datePickerMode
[cpp][/cpp] view plaincopy

  1. UIDatePicker *datePicker = [[UIDatePicker alloc] init];
  2. datePicker.locale = [[NSLocale alloc] initWithLocaleIdentifier:@”zh_Hans_cn”];
  3. datePicker.datePickerMode = UIDatePickerModeDate;
  4. NSString *stdDate = @”1990-01-01″;
  5. NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
  6. formatter.dateFormat = @”yyyy-MM-dd”;
  7. [datePicker setDate:[formatter dateFromString:stdDate] animated:YES];
  8. [datePicker addTarget:self action:@selector(showDate:) forControlEvents:UIControlEventValueChanged];
  9. _dateField.inputView = datePicker;
  10. _dateField.text = stdDate;

在这里,我们也对它的初始日期进行了设置。

对齐事件进行监听即可达到目的,并没有代理协议。
[cpp][/cpp] view plaincopy

  1. – (void)showDate:(UIDatePicker *)datePicker
  2. {
  3.     NSDate *date = datePicker.date;
  4.     NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
  5.     formatter.dateFormat = @”yyyy-MM-dd”;
  6.     NSString *outputString = [formatter stringFromDate:date];
  7.     _dateField.text = outputString;
  8. }

UIImagePickerController

如果不自定义选取照片视图的话,实现照片或者拍照选取功能十分简单,设置协议就可以快速调用。
[cpp][/cpp] view plaincopy

  1. UIImagePickerController *imagePC = [[UIImagePickerController alloc] init];
  2. //从照片库中选择图片, 也可以设置相机
  3. imagePC.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
  4. //允许对图片进行简单的编辑
  5. imagePC.allowsEditing = YES;
  6. imagePC.delegate = self;
  7. [self presentViewController:imagePC animated:YES completion:nil];

协议方法获取图片并进行设置

[cpp][/cpp] view plaincopy

  1. – (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
  2. {
  3.     const NSString *REditedImageIdentifier = @”UIImagePickerControllerEditedImage”;
  4.     UIImage *image = info[REditedImageIdentifier];
  5.     [_imageButton setImage:image forState:UIControlStateNormal];
  6.     [picker dismissViewControllerAnimated:YES completion:nil];
  7. }

UIPickerView

在Component较多的时候,PickerView稍微要复杂一些。首先初始化和设置属性
[cpp][/cpp] view plaincopy

  1. – (void)pickerViewAndMethod
  2. {
  3.     UIPickerView *pickerView = [[UIPickerView alloc] init];
  4.     pickerView.delegate = self;
  5.     pickerView.dataSource = self;
  6.     //显示选择活动器
  7.     pickerView.showsSelectionIndicator = YES;
  8.     _cityField.inputView = pickerView;
  9.     _cityField.text = @”北京 – 海淀”;
  10. }
实现数据源和代理方法,来刷新自身数据和界面。
[cpp][/cpp] view plaincopy

  1. – (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
  2. {
  3.     return rComponentCount;
  4. }
  5. – (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
  6. {
  7.     if (component == rProvinceComponent)
  8.     {
  9.         return _cityList.count;
  10.     }
  11.     else
  12.     {
  13.         NSInteger i = [pickerView selectedRowInComponent:rProvinceComponent];
  14.         NSArray *arr = _cityList[i][@”city”];
  15.         return arr.count;
  16.     }
  17. }
  18. – (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
  19. {
  20.     if (component == rProvinceComponent)
  21.     {
  22.         NSString *proName = _cityList[row][@”province”];
  23.         return proName;
  24.     }
  25.     else
  26.     {
  27.         NSInteger i = [pickerView selectedRowInComponent:rProvinceComponent];
  28.         NSString *cityName = _cityList[i][@”city”][row];
  29.         return cityName;
  30.     }
  31. }
  32. – (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
  33. {
  34.     [pickerView reloadComponent:rCityComponent];
  35.     NSInteger proIndex = [pickerView selectedRowInComponent:rProvinceComponent];
  36.     NSString *proName = _cityList[proIndex][@”province”];
  37.     NSInteger cityIndex = [pickerView selectedRowInComponent:rCityComponent];
  38.     NSString *cityName = _cityList[proIndex][@”city”][cityIndex];
  39.     _cityField.text = [NSString stringWithFormat:@”%@ – %@”, proName, cityName];
  40. }
数据源来自于自己写的一个简单的Plist文件。一个数组中包含多个字典。
这样一个使用各种Picker进行设置的功能就完成了。
demo示例点击打开链接

标签