UIDatePicker和UIPickerView一起使用_沐梓弦乐的博客-程序员宅基地

技术标签: Object-c  

直接贴图片和代码吧

点击TextField  弹出PickerView

 

- (void)initDataPicker{

    self.mToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, 40)];
    self.mToolbar.barStyle = UIBarStyleDefault;
    UIBarButtonItem *done = [[UIBarButtonItem alloc] initWithTitle:@"完成" style:UIBarButtonItemStyleDone target:self action:@selector(doneAction:)];
    UIBarButtonItem *fexible = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil];
    UIBarButtonItem *cancel = [[UIBarButtonItem alloc] initWithTitle:@"取消" style:UIBarButtonItemStyleDone target:self action:@selector(cancelAction:)];
    self.mToolbar.items = [NSArray arrayWithObjects:cancel, fexible, done, nil];
    
    
    self.mPickerView = [[UIPickerView alloc] init];
    _mPickerView.dataSource = self;
    _mPickerView.delegate = self;
    
    
    _datePicker=[[UIDatePicker alloc]initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH , 200)];
    _datePicker.datePickerMode = UIDatePickerModeDate;
    NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"zh_CN"];//设置为中文
    _datePicker.locale = locale;
    
//    NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
//    NSDate *currentDate = [NSDate date];
//    NSDateComponents *comps = [[NSDateComponents alloc] init];
//    [comps setYear:10];//设置最大时间为:当前时间推后十年
//    NSDate *maxDate = [calendar dateByAddingComponents:comps toDate:currentDate options:0];
//    [comps setYear:-10];//设置最小时间为:当前时间前推十年
//    NSDate *minDate = [calendar dateByAddingComponents:comps toDate:currentDate options:0];
    NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
    NSDateComponents *comps = [[NSDateComponents alloc] init];
    [comps setYear:0];//设置最大时间为:当前时间
    NSDate *maxDate = [calendar dateByAddingComponents:comps toDate:[NSDate date] options:0];
    _datePicker.maximumDate = maxDate;
    
}


- (void)getPickerDataWithArray:(NSArray *)arr{

    self.pickerViewDataSource = arr;
    [_mPickerView reloadComponent:0];
    
}

- (void)setPickViewWithField:(UITextField *)field{
    
    if (field.tag == 1002 || field.tag == 1003) {
        field.inputView = _mPickerView;
    }else{
        field.inputView = _datePicker;
    }
    
    field.inputAccessoryView = _mToolbar;
    
}

 

 

按下完成按钮跟取消按钮事件、选中的日期

/**
 *  按下完成按钮
 */
- (void)doneAction:(id)sender
{
    if (selectState == 1) {
        ((UITextField *)[self.view viewWithTag:1002]).text = _pickerViewDataSource[[self.mPickerView selectedRowInComponent:0]];
        [(UITextField *)[self.view viewWithTag:1002] resignFirstResponder];
    }else if(selectState == 0){
        ((UITextField *)[self.view viewWithTag:1003]).text = _pickerViewDataSource[[self.mPickerView selectedRowInComponent:0]];
        [((UITextField *)[self.view viewWithTag:1003]) resignFirstResponder];
    }else if (selectState == 2){
        _startField.text = [self getData];
        [_startField resignFirstResponder];
    }else{
        _endField.text = [self getData];
        [_endField resignFirstResponder];
    }

}

- (void)cancelAction:(id)sender
{
    if (selectState == 1) {
        [((UITextField *)[self.view viewWithTag:1002]) resignFirstResponder];
    }else if(selectState == 0){
        [((UITextField *)[self.view viewWithTag:1003]) resignFirstResponder];
    }else if(selectState == 2){
        [_startField resignFirstResponder];
    }else if(selectState == 3){
        [_endField resignFirstResponder];
    }
}

#pragma mark 得到选择器的时间
- (NSString *)getData{
    
    
    NSDate *date = [_datePicker date];
    NSDateFormatter  *dateformatter = [[NSDateFormatter alloc] init];
    [dateformatter setDateFormat:@"YYYY-MM-dd"];
    NSString *  locationString =[dateformatter  stringFromDate:date];
    return locationString;
}


TextField代理   selectState是标识  是为了清楚是哪个pickview要选择数据源

 

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{

    
    if (textField.tag == 1002) {
        selectState = 1;//标识
        typeArray = @[@"商业用户",@"居民用户"];
        [self setPickViewWithField:textField];
        [self getPickerDataWithArray:typeArray];
        
    }else if(textField.tag == 1003){
        selectState = 0;//标识
        stateArray = @[@"正常状态",@"休眠状态"];
        [self setPickViewWithField:textField];
        [self getPickerDataWithArray:stateArray];
    }else if (textField == _startField){
        selectState = 2;
        [self setPickViewWithField:textField];
    }else if (textField == _endField){
        selectState = 3;
        [self setPickViewWithField:textField];
    }else{
       
        [(UITextField *)[self.view viewWithTag:1002] resignFirstResponder];
        [((UITextField *)[self.view viewWithTag:1003]) resignFirstResponder];
        [_startField resignFirstResponder];
        [_endField resignFirstResponder];
    }
    
    return YES;

}

 

 

pickerView代理

#pragma mark  UIPikcer View Delgate

- (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component
{
    return SCREEN_WIDTH;
}

- (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component
{
    return 40;
}

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
    if (selectState) {
        return typeArray[row];
    }else
        return stateArray[row];
}

#pragma mark -
#pragma mark  UIPicker View DataSource

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
    return 1;
}

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
    return _pickerViewDataSource.count;
}

 


通过代码实现的功能  图片如下

 

  


 

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/lixianyue1991/article/details/72539998

智能推荐

RMAN-06207: WARNING: 1 objects could not be deleted for DISK channel(s) due to mismatched status_wonder_2012的博客-程序员宅基地

使用RMAN备份,运行delete noprompt obsolete; 报以上错误 RMAN> show all;RMAN configuration parameters for database with db_unique_name HZ_DG1 are:CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # defaultCONFI

spring编写事务小实例———转账_向太阳借点阳光的博客-程序员宅基地_转账事务怎么写

一.境搭建1.创建数据库:2.导入jar包:3.Dao层代码:a.DaoAccount接口:转账方法:in代表转入,out代表转出。package com.fxy.studyspring.Dao;public interface AccountDao { public void in(String inner,int money); public void out(Stri...

基于腾讯api 语言识别_eiffel_0311的博客-程序员宅基地_腾讯一句话语言的authorization

功能: 录音文件的识别准备:https://cloud.tencent.com/document/product/1093/35800 注册帐号, 申请SECTET_Id, SECRET_KEY1. 发送请求import org.apache.commons.codec.binary.Base64;import org.apache.http.client.methods.Ht...

maven多模块项目依赖管理与依赖继承_my天降大任的博客-程序员宅基地_maven 多模块依赖

1、指定父模块与默认继承dependencies即使在子项目中不写该依赖项,那么子项目仍然会从父项目中继承该依赖项(全部继承)父模块的pom<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0"         xmlns:xsi="htt...

计算机视觉领域最全汇总_云栖社区v的博客-程序员宅基地

计算机视觉是人工智能(AI)中的热门研究课题,它已经存在多年。然而,计算机视觉仍然是人工智能面临的最大挑战之一。在本文中,我们将探讨使用深度神经网络来解决计算机视觉的一些...

Unity自动化测试工具Automated QA2----调用代码_ShawnWeasley的博客-程序员宅基地_unity 自动化测试

上一篇中讲解了自动化测试工具的基础用法,但是基础用法中无法实现键盘的监控,也就是无法监听输入,而且灵活度也有所欠缺。不过官方提供了另一套工具可以直接与代码交互~用法很简单1.点击Automated QA > Experimental > Create Automated Run也可以在文件夹中右键创建,创建完成后如下:界面很简洁,就是一个结束时退出的选项和一个空的List。2.添加list内容可以看到一些插件内置的调用方法,这里先略过3.要与脚本交互就需要去写脚本,如下就是一个简单的

随便推点

DWR_javaPie的博客-程序员宅基地

DWR 编辑DWR(Direct Web Remoting)是一个用于改善web页面与Java类交互的远程服务器端Ajax开源框架,可以帮助开发人员开发包含AJAX技术的网站。它可以允许在浏览器里的代码使用运行在WEB服务器上的JAVA函数,就像它就在浏览器里一样。中文名DWR全    称Direct Web Remoting应用

Python爬虫实战---爬取豆瓣瓣电影排行前250的字段并写入MySQL数据库_繁华落尽,寻一世真情的博客-程序员宅基地

爬取豆瓣电影Top250要求:1、提取:电影名,导演,主演,拍摄时间,拍摄地,电影类型,评分,评论人数,电影宣传图片的url。2、将提取的数据保存到mysql数据库3、下载电影宣传图片环境配置:Anaconda3 + MySql8.0使用的IDE wingIDE 和 Nvicat Premium 12简要过程:1.访问URL,获取总电影数和每页电影数2.使用生成器生成每一个页面URL,获取:电影名、导演评分、评论人数、电影宣传图片的url3.访问单个电影的URL,获取:主演、拍摄地、电影

GUI_emWin 切换控件的焦点_FledgingSu的博客-程序员宅基地

驱动层API键盘驱动层处理键盘消息函数。这些程序会在具体键(或组合键)被按下或松开时通知窗口管理器。下表按字母顺序列出了驱动层键盘程序。详细描述如下。GUI_StoreKeyMsg() 把消息存储于指定键。GUI_SendKeyMsg() 把消息发送至指定键。GUI_SendKeyMsg()

@Mapper注解的使用_f45056231p的博客-程序员宅基地

@Mapper注解的使用置顶 2018年07月16日 13:36:38 洛城铁匠 阅读数:[email protected]注解的的作用1:为了把mapper这个DAO交給Spring管理 http://412887952-qq-com.iteye.com/blog/23926722:为了不再写mapper映射文件 https://blog.csdn.net/phenomenonstell/a...

vue页面动态切换_Leo·five的博客-程序员宅基地

Vue-router结合transition实现app前进后退动画切换效果首先,配置路由并且修改路由配置配置路由的重点是给Router添加一个goBack方法,用于记录路由的前进状态 this.isBack = trueRouter.prototype.goBack = function () {   this.isBack = true  window.history.go(-1...

linux下字符界面与桌面切换快捷键__冰河的博客-程序员宅基地

Vm虚拟机:切换到字符界面:ctrl+shift+alt+F1切换到桌面界面:alr+F7真实机下面:ctrl+alt+F1切花到字符界面:alr+F7

推荐文章

热门文章

相关标签