zoukankan      html  css  js  c++  java
  • 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

    效果:

  • 相关阅读:
    Markdown基本语法
    Linux之更好的使用Bash
    博客园-使用的模板
    井字棋的最优策略竟是先占角!
    Highcharts入门+Highcharts基础教程,【非常值得学习的资料】
    Python4周 入职培训的过程
    Linux系统入门学习:在CentOS上安装phpMyAdmin
    WeCenter程序安装
    js正则表达式语法
    Sublime text2如何设置快捷键让编写的HTML文件在浏览器预览?
  • 原文地址:https://www.cnblogs.com/-boy/p/4147548.html
Copyright © 2011-2022 走看看