自定义UIDatePickView
来源:互联网 发布:淄博优化网站排名 编辑:程序博客网 时间:2024/05/16 12:02
//// ViewController.m// 05-UIDatePicker-键盘处理//// Created by Itcast.GuangZhou on 15/10/6.// Copyright (c) 2015年 itcast. All rights reserved.//#import "ViewController.h"#import "HMProvince.h"@interface ViewController ()<UIPickerViewDataSource,UIPickerViewDelegate,UITextFieldDelegate>// 生日输入框@property (weak, nonatomic) IBOutlet UITextField *birthField;// 省份输入框@property (weak, nonatomic) IBOutlet UITextField *provinceField;// 日期选择器@property (strong, nonatomic) UIDatePicker *datePicker;// 工具条@property (strong, nonatomic) UIToolbar *toolBar;// 省份选择器@property (strong, nonatomic) UIPickerView *pickerView;// 所有省份数据@property (strong, nonatomic) NSArray *provinces;// 记录选中的省份@property (strong, nonatomic) HMProvince *selectedProvince;@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; // 设置文本输入框的代理 self.birthField.delegate = self; self.provinceField.delegate = self; // 默认显示当天时间 [self datePickerValueChanged:nil];}#pragma mark - 懒加载控件- (UIDatePicker *)datePicker { if (_datePicker == nil) { NSLog(@"创建了日前选择器"); // 创建日期选择器:可以不设置frame _datePicker = [[UIDatePicker alloc] init]; // 设置时区 _datePicker.locale = [NSLocale localeWithLocaleIdentifier:@"zh_CN"]; // 设置时间模式 _datePicker.datePickerMode = UIDatePickerModeDate; // 设置最小时间 (20年前) _datePicker.minimumDate = [NSDate dateWithTimeIntervalSinceNow:-(20 * 365 * 24 * 60 * 60)]; // 设置最大时间 (20年后) _datePicker.maximumDate = [NSDate dateWithTimeIntervalSinceNow:(20 * 365 * 24 * 60 * 60)]; // 设置时间间隔 // 设置的值必须能够被60整除// _datePicker.minuteInterval = 30; // 监听时间值改变事件 [_datePicker addTarget:self action:@selector(datePickerValueChanged:) forControlEvents:UIControlEventValueChanged]; } return _datePicker;}- (UIToolbar *)toolBar { if (_toolBar == nil) { // 创建工具条 _toolBar = [[UIToolbar alloc] init]; // 设置frame:只要设置高度即可 _toolBar.frame = CGRectMake(0, 0, 0, 44); // 设置背景颜色// _toolBar.backgroundColor = [UIColor redColor]; _toolBar.barTintColor = [UIColor orangeColor]; _toolBar.tintColor = [UIColor whiteColor]; // 创建item // 上一个 UIBarButtonItem *lastItem = [[UIBarButtonItem alloc] initWithTitle:@"上一个" style:UIBarButtonItemStylePlain target:self action:@selector(lastItemClick)]; // 下一个 UIBarButtonItem *nextItem = [[UIBarButtonItem alloc] initWithTitle:@"下一个" style:UIBarButtonItemStylePlain target:self action:@selector(nextItemClick)]; // 创建弹簧 UIBarButtonItem *flexibleSpaceItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil]; // 完成 UIBarButtonItem *doneItem = [[UIBarButtonItem alloc] initWithTitle:@"完成" style:UIBarButtonItemStylePlain target:self action:@selector(doneItemClick)]; _toolBar.items = @[lastItem,nextItem,flexibleSpaceItem,doneItem];// [_toolBar addSubview:lastItem]; } return _toolBar;}- (UIPickerView *)pickerView { if (_pickerView == nil) { // 创建选择器 _pickerView = [[UIPickerView alloc] init]; // 设置数据源和代理 _pickerView.dataSource = self; _pickerView.delegate = self; } return _pickerView;}- (NSArray *)provinces { if (_provinces == nil) { NSLog(@"加载了省份数据"); _provinces = [HMProvince provinces]; } return _provinces;}#pragma mark - UIPickerViewDataSource 数据源方法// 两列- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView { return 2;}- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component { if (component == 0) { // 省份列 return self.provinces.count; } else { // 城市列 // 获得省份所在的行号 NSInteger provinceIndex = [pickerView selectedRowInComponent:0]; // 根据索引获得省份 HMProvince *province = self.provinces[provinceIndex]; return province.cities.count; }}#pragma mark - UIPickerView 代理方法- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component { if (component == 0) { // 省份列 // 根据row获得对应的省份 HMProvince *province = self.provinces[row]; return province.name; } else if (component == 1) { // 城市列 // 获得省份所在的行号 NSInteger provinceIndex = [pickerView selectedRowInComponent:0]; // 根据索引获得省份 HMProvince *province = self.provinces[provinceIndex]; // 获得省份对应的所有城市 NSArray *cities = province.cities; // 10 11// NSLog(@"row = %zd,城市个数= %zd,省名 = %@",row,cities.count,province.name); if (cities.count > row) { return cities[row]; } return nil; } return @"";}#pragma mark - UITextField 代理方法- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField { if (textField.inputView) return YES; if (self.birthField == textField) { // 生日 // 自定义输入框的键盘 self.birthField.inputView = self.datePicker; // 设置键盘输入辅助附件 self.birthField.inputAccessoryView = self.toolBar; } else if(self.provinceField == textField){ self.provinceField.inputAccessoryView = self.toolBar; self.provinceField.inputView = self.pickerView; // 默认选中第一个省份 self.selectedProvince = self.provinces[0]; } return YES;}// 监听pickerView选择行事件- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component { if(component == 0) { // 滚动的是省份列 // 刷新城市列 [pickerView reloadComponent:1]; // 主动选择第1列的第0行 [pickerView selectRow:0 inComponent:1 animated:YES]; // 获得选中的省份 self.selectedProvince = self.provinces[row]; } // 设置身份文本输入框的内容 self.provinceField.text = [NSString stringWithFormat:@"%@ %@",self.selectedProvince.name,self.selectedProvince.cities[(component == 0) ? 0 :row]];}#pragma mark - 监听时间值的改变- (void)datePickerValueChanged:(UIDatePicker *)datePicker{ // 获得时间 NSDate *date = datePicker == nil ? [NSDate date]:datePicker.date; // 格式化时间 NSDateFormatter *fmt = [[NSDateFormatter alloc] init]; // 时间格式 fmt.dateFormat = @"yyyy-MM-dd"; // 将时间转换成字符串 self.birthField.text = [fmt stringFromDate:date];}#pragma mark - 监听item的点击- (void)lastItemClick{ if ([self.provinceField isFirstResponder]) { [self.birthField becomeFirstResponder]; }}- (void)nextItemClick{ if([self.birthField isFirstResponder]) { // 如果是生日文本输入框是第一个响应者 [self.provinceField becomeFirstResponder]; }}- (void)doneItemClick{ if (self.provinceField.text.length == 0 && [self.provinceField isFirstResponder]) { // 设置省份内容 self.provinceField.text = [NSString stringWithFormat:@"%@ %@",self.selectedProvince.name,self.selectedProvince.cities[0]]; } // 隐藏键盘 [self.view endEditing:YES];}@end
<pre name="code" class="objc">// 模型#import <Foundation/Foundation.h>@interface HMProvince : NSObject/** * 省份对应的所有城市 */@property (strong, nonatomic) NSArray *cities;/** * 省份的名字 */@property (copy, nonatomic) NSString *name;+(instancetype)provinceWithDict:(NSDictionary *)dict;- (instancetype)initWithDict:(NSDictionary *)dict;+(NSArray *)provinces;@end
<pre name="code" class="objc">// 模型#import "HMProvince.h"@implementation HMProvince- (instancetype) initWithDict:(NSDictionary *)dic{ if (self=[super init]) { [self setValuesForKeysWithDictionary:dic]; } return self;}+ (instancetype) provinceWithDict:(NSDictionary *)dic{ return [[self alloc] initWithDict:dic];}+ (NSArray *) provinces{ NSArray *sourceArr=[NSArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"cities.plist" ofType:nil]]; NSMutableArray *desArr=[NSMutableArray array]; //循环遍历字典数组,字典转模型 for (NSDictionary *dic in sourceArr) { //每一个字典对应着一个模型对象 HMProvince *provincer=[HMProvince provinceWithDict:dic]; [desArr addObject:provincer]; } return desArr;}@end
0 0
- 自定义UIDatePickView
- UIdatePickView
- 自定义
- 自定义
- 自定义
- 自定义
- 自定义
- 自定义TexBox,自定义ComboBox
- 自定义View自定义属性
- 自定义View自定义属性
- 自定义View自定义属性
- 自定义View自定义属性
- 自定义一个自定义对话框
- 自定义控件-自定义吐司
- 自定义checkbox,自定义button
- 自定义控件--自定义对话框
- 自定义控件----自定义属性
- 自定义控件:自定义Toast
- 欢迎使用CSDN-markdown编辑器
- UIDatePickerView常用属性
- 【POJ】:POJ 1575元辅音
- HDU 4738-Caocao's Bridges-无向图找桥 DAG Tarjan
- zookeeper集群模式__me
- 自定义UIDatePickView
- UVALive 6133 Cellphone Typing(字典树)
- 偏好设置的存储
- ZOJ 3203 3203 Light Bulb【三分法】
- Android:程序锁功能的简单实现
- 【找bug有奖励】:POJ1575未通过版本查错,找出答案支付宝转5块
- 一个牛人给java初学者的建议
- 交换a串的位置让b.c串出现最多次 暴力 Codeforces Div. 2 B. ZgukistringZ
- 响应者链条