iOS textField弹出自定义键盘(日期时间、省市、国家)
来源:互联网 发布:神马小说软件下载 编辑:程序博客网 时间:2024/06/15 05:45
弹出选择国家效果图
弹出日期时间效果图
弹出省市效果图
1.选择国家(核心代码)
1.1自定义CountryTF继承自UITextField
CountryTF.h
//// CountryTF.h// LayneCheungDemo//// Created by llkj on 2017/7/28.// Copyright © 2017年 LayneCheung. All rights reserved.//#import <UIKit/UIKit.h>@interface CountryTF : UITextField- (void)initWithText;@end
CountryTF.m
//// CountryTF.m// LayneCheungDemo//// Created by llkj on 2017/7/28.// Copyright © 2017年 LayneCheung. All rights reserved.//#import "CountryTF.h"#import "CountryView.h"#import "CountryModel.h"@interface CountryTF ()<UIPickerViewDelegate, UIPickerViewDataSource>@property (nonatomic, strong) NSArray *dataArr;@property (nonatomic, weak) UIPickerView *pick;@end@implementation CountryTF- (void)awakeFromNib{ [super awakeFromNib]; [self setUp];}- (instancetype)initWithFrame:(CGRect)frame{ self = [super initWithFrame:frame]; if (self) { [self setUp]; } return self;}- (NSArray *)dataArr{ if (_dataArr == nil) { NSString *path = [[NSBundle mainBundle] pathForResource:@"flags.plist" ofType:nil]; _dataArr = [NSArray arrayWithContentsOfFile:path]; NSMutableArray *arrM = [NSMutableArray array]; for (NSDictionary *dict in _dataArr) { CountryModel *countryMode = [CountryModel countryWithDict:dict]; [arrM addObject:countryMode]; } _dataArr = arrM; } return _dataArr;}// 创始化textField- (void)setUp{ UIPickerView *pickView = [[UIPickerView alloc] init]; pickView.delegate = self; pickView.dataSource = self; self.inputView = pickView; self.pick = pickView;}- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{ return 1;}- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{ return self.dataArr.count;}- (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component{ return 75;}- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view{ CountryView *countryView = [CountryView countryView]; countryView.model = self.dataArr[row]; return countryView;}- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{ CountryModel *model = self.dataArr[row]; self.text = model.name;}- (void)initWithText{ [self pickerView:self.pick didSelectRow:0 inComponent:0];}@end
1.2自定义CountryView继承UIView(用的XIB, 也可以代码创建)
CountryView.h
//// CountryView.h// LayneCheungDemo//// Created by llkj on 2017/7/28.// Copyright © 2017年 LayneCheung. All rights reserved.//#import <UIKit/UIKit.h>@class CountryModel;@interface CountryView : UIView@property (nonatomic, strong) CountryModel *model;+ (instancetype)countryView;@end
CountryView.m
//// CountryView.m// LayneCheungDemo//// Created by llkj on 2017/7/28.// Copyright © 2017年 LayneCheung. All rights reserved.//#import "CountryView.h"#import "CountryModel.h"@interface CountryView ()@property (weak, nonatomic) IBOutlet UILabel *nameLb;@property (weak, nonatomic) IBOutlet UIImageView *iconImgView;@end@implementation CountryView+ (instancetype)countryView{ return [[NSBundle mainBundle] loadNibNamed:NSStringFromClass([self class]) owner:nil options:nil].lastObject;}- (void)setModel:(CountryModel *)model{ _model = model; self.nameLb.text = model.name; self.iconImgView.image = [UIImage imageNamed:model.icon];}@end
1.3 数据模型文件
//// CountryModel.h// LayneCheungDemo//// Created by llkj on 2017/7/28.// Copyright © 2017年 LayneCheung. All rights reserved.//#import <Foundation/Foundation.h>@interface CountryModel : NSObject@property (nonatomic, copy) NSString *name;@property (nonatomic, copy) NSString *icon;+ (instancetype)countryWithDict:(NSDictionary *)dict;@end
//// CountryModel.m// LayneCheungDemo//// Created by llkj on 2017/7/28.// Copyright © 2017年 LayneCheung. All rights reserved.//#import "CountryModel.h"@implementation CountryModel+ (instancetype)countryWithDict:(NSDictionary *)dict{ return [[self alloc] initWithDict:dict];}- (instancetype)initWithDict:(NSDictionary *)dict{ if (self = [super init]) { self.name = dict[@"name"]; self.icon = dict[@"icon"]; } return self;}@end
1.选择日期(核心代码)
1.1自定义DateTF继承自UITextField
DateTF.h
//// DateTF.h// LayneCheungDemo//// Created by llkj on 2017/7/31.// Copyright © 2017年 LayneCheung. All rights reserved.//#import <UIKit/UIKit.h>@interface DateTF : UITextField- (void)initWithText;@end
DateTF.m
//// DateTF.m// LayneCheungDemo//// Created by llkj on 2017/7/31.// Copyright © 2017年 LayneCheung. All rights reserved.//#import "DateTF.h"@interface DateTF ()@property (nonatomic, weak) UIDatePicker *pick;@end@implementation DateTF- (void)awakeFromNib{ [super awakeFromNib]; [self setUp];}- (instancetype)initWithFrame:(CGRect)frame{ self = [super initWithFrame:frame]; if (self) { [self setUp]; } return self;}//初始化- (void)setUp{ UIDatePicker *datePick = [[UIDatePicker alloc] init]; //修改datePick日期模式 datePick.datePickerMode = UIDatePickerModeDate; datePick.locale = [NSLocale localeWithLocaleIdentifier:@"zh"]; //监听日期改变 [datePick addTarget:self action:@selector(dateChange:) forControlEvents:UIControlEventValueChanged]; //日期键盘 self.inputView = datePick; self.pick = datePick;}//当日期改变的时候会调用- (void)dateChange:(UIDatePicker *)datePick{ //把当前的日期给文本框赋值 //获取当前选中的日期 NSDateFormatter *fmt = [[NSDateFormatter alloc] init]; [fmt setDateFormat:@"yyy-MM-dd"]; //把当前日期转成字符串 self.text = [fmt stringFromDate:datePick.date];}- (void)initWithText{ [self dateChange:self.pick];}@end
1.选择省市(核心代码)
1.1自定义CityTF继承自UITextField
CityTF.h
//// CityTF.h// LayneCheungDemo//// Created by llkj on 2017/7/31.// Copyright © 2017年 LayneCheung. All rights reserved.//#import <UIKit/UIKit.h>@interface CityTF : UITextField- (void)initWithText;@end
CityTF.m
//// CityTF.m// LayneCheungDemo//// Created by llkj on 2017/7/31.// Copyright © 2017年 LayneCheung. All rights reserved.//#import "CityTF.h"#import "CityModel.h"@interface CityTF ()<UIPickerViewDelegate, UIPickerViewDataSource>@property (nonatomic, strong) NSArray *dataArr;/** 当前选中省份的角标 */@property (nonatomic, assign) NSInteger proIndex;@property (nonatomic, weak) UIPickerView *pick;@end@implementation CityTF- (void)awakeFromNib{ [super awakeFromNib]; //初始化 [self setUp];}- (instancetype)initWithFrame:(CGRect)frame{ self = [super initWithFrame:frame]; if (self) { //初始化 [self setUp]; } return self;}- (NSArray *)dataArr{ if (_dataArr ==nil) { NSString *path = [[NSBundle mainBundle] pathForResource:@"provinces.plist" ofType:nil]; _dataArr = [NSArray arrayWithContentsOfFile:path]; NSMutableArray *arrM = [NSMutableArray array]; for (NSDictionary *dict in _dataArr) { CityModel *model = [CityModel cityWithDict:dict]; [arrM addObject:model]; } _dataArr = arrM; } return _dataArr;}- (void)setUp{ UIPickerView *pick = [[UIPickerView alloc] init]; pick.delegate = self; pick.dataSource = self; self.inputView = pick; self.pick = pick;}//总共有多少列- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{ return 2;}//每一列有多少行- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{ if (component == 0) { return self.dataArr.count; } else { //当前选中的省份决定,当前选中省份下有多少个城市 //当前选中的省份模型,返回当前选中的省份下的城市数量 CityModel *model = self.dataArr[self.proIndex]; return model.cities.count; }}- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{ if (component == 0) { CityModel *model = self.dataArr[row]; return model.name; } else { CityModel *model = self.dataArr[self.proIndex]; return model.cities[row]; }}- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{ if (component == 0) { self.proIndex = row; //第1列选中第0行 [pickerView selectRow:0 inComponent:1 animated:YES]; //刷新数据 [pickerView reloadAllComponents]; } // 取出省份 CityModel *model = self.dataArr[self.proIndex]; NSString *provinceName = model.name; // 取出省份对应的城市 // 获取第一列选中的行 NSInteger cityRow = [pickerView selectedRowInComponent:1]; NSString *cityName = model.cities[cityRow]; self.text = [NSString stringWithFormat:@"%@-%@", provinceName, cityName];}- (void)initWithText{ [self pickerView:self.pick didSelectRow:0 inComponent:0];}@end
1.2 数据模型文件
//// CityModel.h// LayneCheungDemo//// Created by llkj on 2017/7/31.// Copyright © 2017年 LayneCheung. All rights reserved.//#import <Foundation/Foundation.h>@interface CityModel : NSObject@property (nonatomic, strong) NSArray *cities;@property (nonatomic, copy) NSString *name;+(instancetype)cityWithDict:(NSDictionary *)dict;@end
//// CityModel.m// LayneCheungDemo//// Created by llkj on 2017/7/31.// Copyright © 2017年 LayneCheung. All rights reserved.//#import "CityModel.h"@implementation CityModel+ (instancetype)cityWithDict:(NSDictionary *)dict{ CityModel *model = [[CityModel alloc] init]; [model setValuesForKeysWithDictionary:dict]; return model;}@end
如何使用(Main.storyboard 拖几个控件,注意绑定对应的类)
//// ViewController.m// LayneCheungDemo//// Created by llkj on 2017/7/28.// Copyright © 2017年 LayneCheung. All rights reserved.//#import "ViewController.h"#import "CityTF.h"@interface ViewController ()<UITextFieldDelegate>@property (weak, nonatomic) IBOutlet UITextField *countryTF;@property (weak, nonatomic) IBOutlet UITextField *dateTF;@property (weak, nonatomic) IBOutlet UITextField *cityTF;@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; self.countryTF.delegate = self; self.dateTF.delegate = self; self.cityTF.delegate = self;}- (void)textFieldDidBeginEditing:(CityTF *)textField{ //让当前编辑的文本选中第一个. //在运行时,会去找它真实类型的方法.(在这里可修改textField的类型,也可以给textField写一个category扩充一个initWithText的方法声明) [textField initWithText];}// 拦截用户输入- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{ return NO;}- (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated.}- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ [self.view endEditing:YES];}@end
demo下载地址:http://download.csdn.net/detail/u010981736/9916416
阅读全文
0 0
- iOS textField弹出自定义键盘(日期时间、省市、国家)
- 练习:选择日期和省市(自定义键盘)
- iOS模拟器,点击textfield弹出键盘
- iOS textfield 键盘弹出后不能切换中文键盘
- IOS TextField弹出键盘挡住输入框的问题
- IOS TextField弹出键盘挡住输入框的问题(续)
- ios -- 虚拟键盘弹出挡住textfield的分析以及解决办法
- ios 解决textfield无法自动弹出键盘问题
- iOS开发:TextField随着键盘的弹出上移
- ios 自定义cell中有textField,点击textField时,防止键盘挡住textField
- 自定义textfield的键盘
- iOS TextField 弹出键盘时实现view整体上移下移:防止弹出键盘遮挡输入框
- textField 真机上键盘不弹出
- 点击TextField禁止弹出键盘
- iOS textField 回收键盘
- Android 选择日期时间对话框(可选择开始结束时间,已解决弹出键盘问题)
- Android 选择日期时间对话框(可选择开始结束时间,已解决弹出键盘问题)
- iOS中,textField弹出键盘时,让整个视图上移,键盘回收,视图收回
- linux日志
- SQLserver分页语句
- Spring Aspectj 代理 前置 后置 以及 异常
- Hadoop-No.2之标准文件格式
- Android 6.0权限申请
- iOS textField弹出自定义键盘(日期时间、省市、国家)
- 【揭秘】欧深特教你如何选择正确的光纤跳线
- ISO/OSI和TCP/IP
- TensorFlow的reshape操作 tf.reshape
- 配置网络接口地址
- webapck 学习指南
- Android-Dialog根据listview的数据量动态改变高度,并且有一个最大的高度
- 2017-7-30
- PID公式的推导过程及实现代码