展示效果 : (UIDatePicker & UIToolBar & UITextField 共同配合使用)

  

 

请问 : 实现的步骤是什么 ?

第一步,在程序视图加载完成之后,首先来创建一个 "日期选择器" 并将 "日期选择器" 设置为文本框的 "输入视图". 完成后再创建一个 "工具栏", 设置背景颜色及frame. 最后将 "工具栏" 设置为文本框的辅助输入视图. 特别注意 : 如果要将一个 "工具栏" 设置为文本框的辅助输入视图,那么frame中的x | y | width 无效.只有height才能自定义设置.

第二步,在 "工具条" 中创建 "取消" & "弹簧" & "完成" 按钮, 注意 : 工具条中的所有内容都必须是UIBarButtonItem类型的控件. 创建完成后将上面创建的UIBarButtonItem添加到 "工具栏" 中.

第三步,点击取消按钮,只需要将退出键盘即可. 点击完成按钮需要做如下几件事情.

l  1> 获取用户选择的日期. 由于日期控件是我们之前在视图加载完成之后纯代码创建的一个局部变量, 因此不能使用IBOutlet进行连线. 所以我们需要在类扩展中定义一个UIDatePicker类型的全局属性进行记录. 注意 : 我们需要使用日期格式类将日期对象转换为字符串对象进行显示.

l  2> 把转换完成的字符串设置给文本框.

l  3>把键盘叫回去.

第四步,如何将日期选择器的内容自动设置到文本输入框中 ? 由于UIDatePicker是继承自UIControl. 因此UIDatePicker可以使用addTarget方法进行值改变事件的注册.

 

 

 

// 本地化的设置

 

 

// 第一步代码实现

------------------------------ ViewController.m ------------------------------

@interface ViewController ()
/** 文本输入框 */
@property (weak, nonatomic) IBOutlet UITextField *textField;
 
@end
 
@implementation ViewController
 
- (void)viewDidLoad {
    [super viewDidLoad];
   
    // 1. 创建一个datePicker
    UIDatePicker *datePicker = [[UIDatePicker alloc] init];
    // 1.2 修改显示语言
    datePicker.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"zh-Hans"];
    // 1.3 修改显示模式
    datePicker.datePickerMode = UIDatePickerModeDate;
   
    // 2. 设置文本框弹出datePicker键盘
    self.textField.inputView = datePicker;
   
    // 3. 创建一个工具栏
    UIToolbar *toolBar = [[UIToolbar alloc] init];
    // 3.2 设置工具条的背景颜色
    toolBar.barTintColor = [UIColor purpleColor];
    // 3.3 设置工具条的frame
    toolBar.frame = CGRectMake(0, 0, 0, 44);
   
    // 4. 设置工具栏显示到键盘的上方
    self.textField.inputAccessoryView = toolBar;
}

 

@end

 

 

// 第二步代码实现

------------------------------ ViewController.m ------------------------------

// 4. 创建工具栏中的按钮

    // 4.1 "取消" 按钮

    UIBarButtonItem *itemCancel = [[UIBarButtonItem alloc] initWithTitle:@"取消" style:UIBarButtonItemStylePlain target:self action:@selector(didClickCancelButton)];

   

    // 4.2 "弹簧" 按钮

    UIBarButtonItem *itemSpring = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];

   

    // 4.3 "完成" 按钮

    UIBarButtonItem *itemDone = [[UIBarButtonItem alloc] initWithTitle:@"完成" style:UIBarButtonItemStyleDone target:self action:@selector(didClickDoneButton)];

   

    // 4.4 将上面创建的UIBarButtonItem添加到 "工具栏" 中

    toolBar.items = @[itemCancel, itemSpring, itemDone];

 

 

 

// 第三步代码实现

------------------------------ ViewController.m ------------------------------

/** 用来记录创建 "日期选择器" */
@property (nonatomic, weak) UIDatePicker *datePicker;
 
// 1.4 记录日期选择器
self.datePicker = datePicker;
 
#pragma mark - item点击事件处理
// 点击了 "取消" 按钮
- (void)didClickCancelButton
{
    // 退出键盘
    [self.view endEditing:YES];
}
 
// 点击了 "完成" 按钮
- (void)didClickDoneButton
{
    // 1. 获取用户选择的日期
    NSDate *date = self.datePicker.date;
    // 1.2 使用NSDateFormatter将一个NSDate对象转换为NSString对象
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    // 1.3 设置将来要的字符串格式
    formatter.dateFormat = @"yyyy-MM-dd";
    // 1.4 开始转换
    NSString *strDate = [formatter stringFromDate:date];
   
    // 2. 将日期设置给文本输入框
    self.textField.text = strDate;
   
    // 3. 退出键盘
    [self.view endEditing:YES];
}

 

 

// 第四步代码实现

------------------------------ ViewController.m ------------------------------

// 1.5 为datePicker注册一个 "值改变" 改变事件
[datePicker addTarget:self action:@selector(dateChanged:) forControlEvents:UIControlEventValueChanged];
 
#pragma mark - 日期选择器的点击事件
- (void)dateChanged:(UIDatePicker *)datePicker
{
    // 1. 使用日期格式化将日期转换成字符串
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";
    NSString *str = [formatter stringFromDate:datePicker.date];
    NSLog(@"日期 : %@",str);
}