UIPickerView
选择框
UIPickerView *pick = [[UIPickerView alloc]initWithFrame:CGRectMake(0, 20, self.view.frame.size.width, 200)];/**< 初始化 */
pick.delegate = self;/**< 设置代理 */
pick.dataSource = self;/**< 设置数据源 */
NSLog(@"%ld",pick.numberOfComponents);/**< 组数,只读 */
[pick numberOfRowsInComponent:0];/**< 第X组有多少行 */
[pick rowSizeForComponent:0];/**< 第X组的行的宽高 */
[pick reloadAllComponents];/**< 重新加载所有的组 */
[pick reloadComponent:0];/**< 重新加载第X组 */
[pick selectRow:3 inComponent:1 animated:YES];/**< 指定某组某行滚动到中心 */
[pick selectedRowInComponent:2];/**< 返回(第X组)选中的行,如果没有选择返回-1 */
pick.showsSelectionIndicator = YES;/**< 显示选择框,默认为no */
[self.view addSubview:pick];
代理方法
#pragma mark - pickView的数据源方法
/**< 设置pickView的组数 */
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
return self.array.count;
}
/**< 设置每组的行数 */
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
NSArray *list = self.array[component];
return list.count;
}
#pragma mark - pickView的代理方法
/**< 设置每组的宽度 */
- (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component
{
return self.view.frame.size.width/3;
}
/**< 设置每行的高度 */
- (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component
{
return 50;
}
/**< 显示每行的内容 */
- (nullable NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
NSArray *list = self.array[component];
return list[row];
}
- (nullable NSAttributedString *)pickerView:(UIPickerView *)pickerView attributedTitleForRow:(NSInteger)row forComponent:(NSInteger)component NS_AVAILABLE_IOS(6_0)
{
return nil;
}
/**< 自定义pickerView的时候用到它,用view显示 */
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(nullable UIView *)view
{
/**
可以借助xib设置,也可以纯代码编写
*/
return view;
}
/**< 选中某一组某一行时操作 */
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
NSLog(@"%@",pickerView.textInputContextIdentifier);
}
选择框能实现挺多的功能,例如“点菜系统(普通的实现代理方法)”,例如“国旗选择(自定义pickerView,可以用XIB,也可以纯代码)”,例如“省市联动(plist建立的不同决定)”
关于时间的一些picker有另一个控件叫做UIDatePicker
UIDataPicker
datePicker的所有属性的用法
// datePicker取出来的是本机的时间,不用设置宽高,因为宽高是固定的
UIDatePicker *datePicker = [[UIDatePicker alloc]initWithFrame:CGRectMake(0, 20, self.view.frame.size.width, 100)];
[self.view addSubview:datePicker];
/**
UIDatePickerModeTime, 显示小时-分钟-秒-上下午
UIDatePickerModeDate, 显示年月日
UIDatePickerModeDateAndTime, 显示日期-小时-分钟-秒-上下午
UIDatePickerModeCountDownTimer,显示时间
*/
datePicker.datePickerMode = UIDatePickerModeDate;/**< 类型,默认为UIDatePickerModeDateAndTime类型 */
#pragma mark - locale
// NSLocale *locle = datePicker.locale;/**< 设置DatePicker的地区,即设置DatePicker显示的语言 */
NSLog(@"%@",[NSLocale availableLocaleIdentifiers]);/**< 跟踪所有可用的地区,取出想要的地区 */
[datePicker setLocale:[[NSLocale alloc]initWithLocaleIdentifier:@"zh_Hans_CN"]];/**< 设置日期控件的地区 */
#pragma mark - calendar
[datePicker setCalendar:[NSCalendar currentCalendar]];/**< 设置dataPicker的日历,默认为当天 */
#pragma mark - timeZone
[datePicker setTimeZone:[NSTimeZone defaultTimeZone]];/**< 设置datePicker的时区 */
#pragma mark - date
[datePicker setDate:[NSData data]];/**< 设置datepicker的日期 */
#pragma mark - minimumDate
[datePicker setMinimumDate:[NSData data]];/**< 设置允许的最小日期 */
#pragma mark - maximumDate
[datePicker setMaximumDate:[NSData data]];/**< 设置允许的最大日期 */
#pragma mark - countDownDuration
/**< 设置dataPicker的倒计时 */
// 1.设置日期选择的模
[datePicker setDatePickerMode:UIDatePickerModeCountDownTimer];
// 2.设置倒计时的时长.
// Tips: 设置倒计时时长需要在确定模式之后指定(单位为秒)
[datePicker setCountDownDuration:10*60];
#pragma mark - minuteInterval
/**
你可以将分钟表盘设置为以不同的时间间隔来显示分钟,前提是该间隔要能够让60整除。默认间隔是一分钟。如果要使用不同的间隔,需要改变 minuteInterval属性:
*/
datePicker.minuteInterval = 15;/**< 设置分钟间隔 */
常用设置:
datePicker.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"zh_CN"];
// 设置区域为中国简体中文
datePicker.datePickerMode = UIDatePickerModeDate;
// 设置picker的显示模式:只显示日期
监听事件
[datePicker addTarget:self action:@selector(dateChange:)forControlEvents:UIControlEventValueChanged];
日期范围
你可以通过设置mininumDate 和 maxinumDate 属性,来指定使用的日期范围。如果用户试图滚动到超出这一范围的日期,表盘会回滚到最近的有效日期。两个方法都需要NSDate 对象作参数:
NSDate* minDate = [[NSDate alloc]initWithString:@"1900-01-01 00:00:00 -0500"];
NSDate* maxDate = [[NSDate alloc]initWithString:@"2099-01-01 00:00:00 -0500"];
datePicker.minimumDate = minDate;
datePicker.maximumDate = maxDate;
如果两个日期范围属性中任何一个未被设置,则默认行为将会允许用户选择过去或未来的任意日期。这在某些情况下很有用处,比如,当选择生日时,可以是过去的任意日期,但终止与当前日期。如果你希望设置默认显示的日期,可以使用date属性:
datePicker.date = minDate;
此外,你还可以用 setDate 方法。如果选择了使用动画,则表盘会滚动到你指定的日期:
[ datePicker setDate:maxDate animated:YES];