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

效果:

时间: 2024-08-04 22:35:46

UI进阶之UIDatePicker键盘处理的相关文章

IOS之--UI进阶-- 多控制器管理第一天

 iOS之--UI进阶-- 多控制器管理第一天 01-项目中常见的文件(LaunchScreen) Xcode5 框架是苹果事先已经导入进去的.在项目的结构当中就能够看到导入的框架. Xcode6 会自动导入一些觉见的框架.在项目结构当中,看不到已经导入的框架. LaunchScreen.xib:用来设置启动界面. Xcode7 会自动导入一些觉见的框架.在项目结构当中,看不到已经导入的框架. LaunchScreen.storyBoard LaunchScreen原理: 会自动加载Launch

UI进阶 即时通讯之XMPP好友列表、添加好友、获取会话内容、简单聊天

这篇博客的代码是直接在上篇博客的基础上增加的,先给出部分代码,最后会给出能实现简单功能的完整代码. UI进阶 即时通讯之XMPP登录.注册 1.好友列表 初始化好友花名册 1 #pragma mark - 管理好友 2 // 获取管理好友的单例对象 3 XMPPRosterCoreDataStorage *rosterStorage = [XMPPRosterCoreDataStorage sharedInstance]; 4 // 用管理好友的单例对象初始化Roster花名册 5 // 好友操

UI进阶 XML解析适配 'libxml/tree.h'file not found 错误解决办法

Xcode 'libxml/tree.h'file not found 错误解决办法 在工程的"Build Settings"页中找到"Header Search Path"项,添加"/usr/include/libxml2".在"Other Linker Flags"项,添加"-lxml2" UI进阶 XML解析适配 'libxml/tree.h'file not found 错误解决办法

Android更新Ui进阶精解(二)

<代码里的世界> 用文字札记描绘自己 android学习之路 转载请保留出处 by Qiao http://blog.csdn.net/qiaoidea/article/details/45115047 Android更新Ui进阶精解(一) android ui线程检查机制 Android更新Ui进阶精解(二) android 线程更新UI机制 1.回顾 第一篇讲了对Ui线程更新的方法和见解,然后接着讲了线程检查机制,这里来详细分析下更新Ui的核心--Android中消息系统模型.当然,这里要

UI进阶 XML解析适配 引入GDataXML文件时候 &#39;libxml/tree.h&#39;file not found 错误解决办法

在工程的"Build Settings"页中找到"Header Search Path"项,添加"/usr/include/libxml2". 在"Other Linker Flags"项,添加"-lxml2" 同理引入别的类型文件不匹配的时候也可以用这种方法 UI进阶 XML解析适配 引入GDataXML文件时候 'libxml/tree.h'file not found 错误解决办法

android UI进阶之实现listview中checkbox的多选与记录

今天继续和大家分享涉及到listview的内容.在很多时候,我们会用到listview和checkbox配合来提供给用户一些选择操作.比如在一个清单页面,我们需要记录用户勾选了哪些条目.这个的实现并不太难,但是有很多朋友来问我如何实现,他们有遇到各种各样的问题,这里就一并写出来和大家一起分享. ListView的操作就一定会涉及到item和Adapter,我们还是先来实现这部分内容. 首先,写个item的xml布局,里面放置一个TextView和一个CheckBox.要注意的时候,这里我设置了C

android UI进阶之实现listview的分页加载

 分享了下拉刷新,这是一个用户体验非常好的操作方式.新浪微薄就是使用这种方式的典型. 还有个问题,当用户从网络上读取微薄的时候,如果一下子全部加载用户未读的微薄这将耗费比较长的时间,造成不好的用户体验,同时一屏的内容也不足以显示如此多的内容.这时候,我们就需要用到另一个功能,那就是listview的分页了.通过分页分次加载数据,用户看多少就去加载多少. 通常这也分为两种方式,一种是设置一个按钮,用户点击即加载.另一种是当用户滑动到底部时自动加载.今天我就和大家分享一下这个功能的实现. 首先,

Objective-c——UI进阶开发第一天(UIPickerView和UIDatePicker)

一.知识点 1.介绍数据选择控件UIPickerView和日期选择控件UIDatePicker控件 * UIPickerView的案例 * 点餐系统 * 城市选择 * 国旗选择 * UIDatePicker的案例 * UIToolbar的介绍和基本使用 * UIBarButtonItem的介绍和演示 * 将日期或时间数据设置到文本框上 2.项目配置文件介绍 * 应用头像 * 应用加载图片的设置 * info.plist文件介绍: * 常用的key * Xcode 6以前都是以“项目名称-info

IOS开发——UI进阶篇(六)键盘处理

一.键盘通知我们经常需要在键盘弹出或者隐藏的时候做一些特定的操作,因此需要监听键盘的状态 键盘状态改变的时候,系统会发出一些特定的通知UIKeyboardWillShowNotification // 键盘即将显示UIKeyboardDidShowNotification // 键盘显示完毕UIKeyboardWillHideNotification // 键盘即将隐藏UIKeyboardDidHideNotification // 键盘隐藏完毕UIKeyboardWillChangeFrame