UI进阶之UIDatePicker键盘处理
一:常用属性
@property (nonatomic) UIDatePickerMode datePickerMode; // 日期选择模式,默认UIDatePickerModeDateAndTime
@property (nonatomic, retain) NSLocale *locale; // 语言环境,默认[NSLocale currentLocale],nil使用默认值
@property (nonatomic, retain) NSDate *date;// 当前时间
二:自定义键盘及键盘上的UIToolbar
//自定义文本框弹出键盘
通过设置UITextField的inputView属性来修改当文本框获得焦点后,弹出什么控件。设置该属性的值为UIDatePicker控件。(动态创建一个UIDatePicker控件(无需设置高宽)),这样就可以实现当文本框获得焦点后,自定义弹出键盘了。
/** 参考代码: - (void)viewDidLoad { [super viewDidLoad]; // 创建UIDatePicker对象 UIDatePicker *datePicker = [[UIDatePicker alloc] init]; // 设置语言区域 datePicker.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"zh-Hans"]; // 设置显示模式 datePicker.datePickerMode = UIDatePickerModeDateAndTime; // 设置文本框, 当输出的时候显示的键盘是日期选择控件 self.txtDate.inputView = datePicker; } */
// 自定义键盘上的工具控件
设置文本框的inputAccessoryView属性。比如:txtField.inputAccessoryView = 某个UIView;
** 工具条的使用: UIToolbar, 演示设置工具条背景色、 设置背景色透明。(barTintColor,从iOS7开始;backgroundColor继承自UIView, 从iOS2开始。)
/** 设置键盘工具条的参考代码: - (void)viewDidLoad { [super viewDidLoad]; // 创建UIDatePicker对象 UIDatePicker *datePicker = [[UIDatePicker alloc] init]; // 设置语言区域 datePicker.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"zh-Hans"]; // 设置显示模式 datePicker.datePickerMode = UIDatePickerModeDateAndTime; // 设置文本框, 当输出的时候显示的键盘是日期选择控件 self.txtDate.inputView = datePicker; self.keyboardDatePicker = datePicker; // 为日期控件注册一个值改变事件 [datePicker addTarget:self action:@selector(datepickerValueChanged) forControlEvents:UIControlEventValueChanged]; // ====================== 设置文本框弹出键盘时的工具条 ====================== // 1. 创建工具条 UIToolbar *toolBar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 44)]; // 2.向工具条中增加一些按钮(UIBarButtonItem) UIBarButtonItem *item1 = [[UIBarButtonItem alloc] initWithTitle:@"上一个" style:UIBarButtonItemStylePlain target:self action:@selector(previousClick:)]; UIBarButtonItem *item2 = [[UIBarButtonItem alloc] initWithTitle:@"下一个" style:UIBarButtonItemStylePlain target:self action:@selector(nextClick:)]; UIBarButtonItem *item3 = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil]; UIBarButtonItem *item4 = [[UIBarButtonItem alloc] initWithTitle:@"完成" style:UIBarButtonItemStylePlain target:self action:@selector(doneClick:)]; // 将按钮添加到toolBar中 toolBar.items = @[item1, item2, item3, item4]; // 设置工具条到文本框的inputAccessoryView属性 self.txtDate.inputAccessoryView = toolBar; // ====================== 设置文本框弹出键盘时的工具条 ====================== } */
设置UIDatePicker的datepickerMode、Locale * picker.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"zh-Hans"]; * picker.datePickerMode = UIDatePickerModeDateAndTime; ** 当日期选择控件选择的日期改变后, 将新的日期设置到文本框内。 ** 思路:为日期选择控件注册ValueChanged事件, 当该事件被触发时获取日期, 并显示到文本框中。 ** 拖一个UIDatePicker到View中, 然后拖线到控制器, 查看Action中的事件(最常用的就是Value Changed事件) /** 参考代码: [self.datePicker addTarget:self action:@selector(dpDateChanged) forControlEvents:UIControlEventValueChanged]; - (void)dpDateChanged { // 创建日期格式化器 NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; // 设置日期格式 formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss"; // 格式化日期、 self.txtDate.text = [formatter stringFromDate:self.datePicker.date]; // 关闭键盘 [self.view endEditing:YES]; } */
代码实例:
#import "ViewController.h" @interface ViewController () @property (weak, nonatomic) IBOutlet UITextField *textField; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. // 创建UIDatePicker对象 UIDatePicker *date = [[UIDatePicker alloc] init]; // 设置属性 本地化/日期格式 date.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"zh-Hans"]; date.datePickerMode = UIDatePickerModeDate; date.backgroundColor = [UIColor lightGrayColor]; #warning // 监听UIDatePicker的valueChange事件,一般情况下继承自UIControl的控件的事件可以通过addTarget // 没有继承UIControl的控件通过代理或通知来监听事件 [date addTarget:self action:@selector(valueChange:) forControlEvents:UIControlEventValueChanged]; // textFiled设置日期键盘 self.textField.inputView = date; // textFiled设置辅助键盘 // 默认toolbar不设置frame是不会显示的 UIToolbar *toolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 44)]; // 给toolbar设置背景色,默认backgroundColor不行,因为backgroundColor属性是toolbar继承UIView的属性,如果要设置toolbar的背景色需要设置toolbar的barTintColor属性 toolbar.barTintColor = [UIColor grayColor]; // 在toolbar上添加barbuttonItem UIBarButtonItem *item1 = [[UIBarButtonItem alloc] initWithTitle:@"上一个" style:UIBarButtonItemStylePlain target:nil action:nil]; UIBarButtonItem *item2 = [[UIBarButtonItem alloc] initWithTitle:@"下一个" style:UIBarButtonItemStylePlain target:nil action:nil]; UIBarButtonItem *item3 = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil]; UIBarButtonItem *item4 = [[UIBarButtonItem alloc] initWithTitle:@"完成" style:UIBarButtonItemStylePlain target:self action:@selector(doneClick)]; toolbar.items = @[item1, item2, item3, item4]; self.textField.inputAccessoryView = toolbar; } #pragma mark - UIDatePicker的值改变 - (void)valueChange:(UIDatePicker *)date { NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; formatter.dateFormat = @"yyyy-MM-dd"; NSString *text = [formatter stringFromDate:date.date]; self.textField.text = text; } - (void)doneClick { [self.view endEditing:YES]; } @end
效果: