IOS笔记045-UIDatePicker和UIPickerView
2015-06-10 00:18
471 查看
这是两种可以上下滚动的控件。
这是UIDatePicker,可以显示日期和时间。
代码参考
注意点:PickerView的高度不能改,默认162,PickerView里面每行的高度 可以改,不要弄混淆了。
这是UIDatePicker,可以显示日期和时间。
// // ViewController.m // KVC实现原理 // // Created by Christian on 15/6/9. // Copyright (c) 2015年 slq. All rights reserved. // #import "ViewController.h" #import "SLQProvince.h" @interface ViewController () <UITextFieldDelegate,UIPickerViewDataSource,UIPickerViewDelegate> @property (nonatomic,weak) UIDatePicker *datePicker; @property (nonatomic, weak) UIPickerView *cityPicker; @property (nonatomic, strong) NSMutableArray *provinces; @property (nonatomic, assign) NSInteger proIndex; @end @implementation ViewController // 懒加载省会 - (NSMutableArray *)provinces { if (_provinces == nil) { // 装所有的省会 _provinces = [NSMutableArray array]; // 加载plist文件 NSString *filePath = [[NSBundle mainBundle] pathForResource:@"provinces.plist" ofType:nil]; NSArray *arr = [NSArray arrayWithContentsOfFile:filePath]; for (NSDictionary *dict in arr) { // 字典转模型 SLQProvince *p = [SLQProvince provinceWithDict:dict]; [_provinces addObject:p]; } } return _provinces; } - (void)viewDidLoad { [super viewDidLoad]; // self.birthdayField.delegate = self; self.cityField.delegate = self; // [self setBirthdayFieldKeyboard]; [self setCitiesFieldKeyboard]; } #pragma mark - textField代理方法 // 是否允许修改填充字符串 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { return NO; } // 是否允许开始编辑 - (void)textFieldDidBeginEditing:(UITextField *)textField { if (textField == self.birthdayField) { // 添加自定义窗口 [self datePickerValueChanged:self.datePicker]; } else { [self pickerView:self.cityPicker didSelectRow:0 inComponent:0]; } } #pragma mark - UIPickerView #pragma mark UIPickerView 数据源 // 列数 - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView { return 2; } // 某一列行数 - (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component { if (component == 0) // 省会 { return self.provinces.count; } else // 其他城市 { SLQProvince *pro = self.provinces[_proIndex]; return pro.cities.count; } } #pragma mark UIPickerView 代理 // 每行的标题 - (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component { if (component == 0) // 省会 { // 获取省会 SLQProvince *pro = self.provinces[row]; return pro.name; } else // 其他城市 { SLQProvince *pro = self.provinces[_proIndex]; return pro.cities[row]; } } // 是否选中某行 - (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component { // 滚动省会刷新城市 if(component == 0) { // 记录当前省会 _proIndex = [pickerView selectedRowInComponent:0]; [pickerView reloadComponent:1]; } // 获取选中省会 SLQProvince *pro = self.provinces[_proIndex]; NSInteger cityIndex = [pickerView selectedRowInComponent:1]; NSString *cityName = pro.cities[cityIndex]; _cityField.text = [NSString stringWithFormat:@"%@-%@",pro.name,cityName]; } #pragma mark - 自定义方法 // 设置城市键盘 - (void)setCitiesFieldKeyboard { // UIPickerView *picker = [[UIPickerView alloc] init]; _cityPicker = picker; picker.dataSource = self; picker.delegate = self; self.cityField.inputView = picker; } // 设置生日键盘 - (void)setBirthdayFieldKeyboard { // UIDatePicker *datePicker = [[UIDatePicker alloc] init]; _datePicker = datePicker; // 只显示时间 datePicker.datePickerMode = UIDatePickerModeDate; // 显示中文 datePicker.locale = [NSLocale localeWithLocaleIdentifier:@"zh"]; // 监听值得改变 [datePicker addTarget:self action:@selector(datePickerValueChanged:) forControlEvents:UIControlEventValueChanged]; self.birthdayField.inputView = datePicker; } - (void)datePickerValueChanged:(UIDatePicker *)datePicker { NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; // 格式化日期格式 formatter.dateFormat = @"yyyy-MM-dd"; NSString *date = [formatter stringFromDate:datePicker.date]; // 显示时间 self.birthdayField.text = date; } @end
代码参考
注意点:PickerView的高度不能改,默认162,PickerView里面每行的高度 可以改,不要弄混淆了。
相关文章推荐
- 【ios开发学习 - 第三课】UITextField使用
- 基于数组实现Java 自定义Queue队列及应用
- UI设计师能否赚钱
- iOS选择器视图控件(UIPickerView)使用方法总结
- 转:UIViewController中各方法调用顺序及功能详解
- ustc_acm_question
- 向产品宣战——开发者眼中的Android UI Design
- iOS8 自定义navigationbar 以及 UIBarButtonItem 边距问题
- easyui 筛选数据及仅允许选择数据
- UIPicker使用
- iOS开发UI篇 -- UIPageControl
- iOS开发UI篇 -- UIScrollView
- UITableViewCell
- UVA 10401---Injured Queen Problem+DP
- HDU_2062 Subset sequence(math)
- APUE.3e 安装(基于ubuntu12.0.4)(转自涛哥)
- UINavigationController - iOS - UI基础知识总结12
- 渣渣ACM日记——1005-Number Sequence(HDOJ)
- iOS中添加UITapGestureRecognizer手势识别后,UITableView的didSelectRowAtIndexPath失效
- iOS-学习笔记-UI-第六天