对于实现点击TextField弹出日期选择器的方法有多种多样,可以将UIDatePicker作为textfield的inputView,或者用通知中心监听键盘弹出的响应事件,也可通过textfield的代理方法来实现。
这里我选择用textfield的inputView来实现该操作。(只做简单的讲解,其实还可通过把toolbar设置为inputAccessoryView实现拓展功能)
首先在控制器的.h文件声明三个成员变量
UIDatePicker*datePicker;
UITextField*dateTextField;
NSLocale*datelocale;
然后初始化一个UITextfield实例对象,这里不做说明了(太Easy了好么)。
再对.h中声明的datePicker实例化
datePicker= [[UIDatePickeralloc]init];
datelocale= [[NSLocalealloc]initWithLocaleIdentifier:@"zh_zn"];//设置时区
datePicker.locale=datelocale;
datePicker.timeZone= [NSTimeZonetimeZoneWithName:@"GMT"];
datePicker.datePickerMode=UIDatePickerModeDate;
//这句是重点
dateTextField.inputView=datePicker;
苹果使用的是格里高利历 这里进行设置
NSDate*localDate = [NSDatedate];
NSCalendar*calendar = [[NSCalendaralloc]initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents*components = [[NSDateComponentsalloc]init];
[componentssetYear:-100];
[componentssetMonth:12];
[componentssetDay:30];
NSDate*minDate = [calendardateByAddingComponents:componentstoDate:localDateoptions:0];
_datePicker.maximumDate= localDate;
_datePicker.minimumDate= minDate;
上面利用日期偏移设置最大日期和最小日期
//接下来为日期选择器添加事件 条件是当值改变 使显示在textfield上的时间做出改变
[_datePickeraddTarget:self action:@selector(selectDate:)forControlEvents:UIControlEventValueChanged];
//事件中设置日期显示格式和显示位置
-(void)selectDate:(UIDatePicker *)datePicker
{
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
dateFormatter setDateFormat = @"yyyy-MM-dd";
[dateFormatter setLocale:dateLocale];
self.dateTextField.text = [NSString stringWithFormat:@"%@",[dateFormatter stringFromDate:datePicker.date]];
}
以上就可以实现了。
网友评论