效果:
1.控制器代码:
// // ViewController.m #import "ViewController.h" #import "Province.h" @interface ViewController ()<UITextFieldDelegate,UIPickerViewDelegate,UIPickerViewDataSource> @property (weak, nonatomic) IBOutlet UITextField *birthdayField; @property (weak, nonatomic) IBOutlet UITextField *cityField; @property(nonatomic,weak)UIDatePicker *datePicker; @property(nonatomic,strong)NSMutableArray *provinces; @property(nonatomic,weak)UIPickerView *pickerView; @property(nonatomic,assign)NSInteger provinceIndex; @end @implementation ViewController - (NSMutableArray *)provinces { if (_provinces == nil) { _provinces = [NSMutableArray array]; // 字典转模型 NSString *filePath = [[NSBundle mainBundle] pathForResource:@"provinces" ofType:@"plist"]; NSArray *data = [NSArray arrayWithContentsOfFile:filePath]; for (NSDictionary *dict in data) { Province *p = [Province provinceWithDict:dict]; [_provinces addObject:p]; } } return _provinces; } - (void)viewDidLoad { [super viewDidLoad]; // 设置文本框的代理 _birthdayField.delegate = self; _cityField.delegate = self; // 自定义键盘 [self setupBirthdayKeyboard]; // 自定义城市键盘 [self setupCityKeyboard]; } - (void)setupCityKeyboard { // 创建UIPickerView UIPickerView *pickerView = [[UIPickerView alloc] init]; pickerView.dataSource = self; pickerView.delegate = self; _pickerView = pickerView; // _cityField.inputView = pickerView; } #pragma mark - UIPickerViewDataSource - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView { return 2; } - (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component { if (component == 0) { // 描述省 return self.provinces.count; }else{ // 描述选中的省的城市 Province *p = self.provinces[_provinceIndex]; return p.cities.count; } } - (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component { if (component == 0) { // 描述省 Province *p = self.provinces[row]; return p.name; }else{ // 描述城市 Province *p = self.provinces[_provinceIndex]; return p.cities[row]; } } #pragma mark - UIPickerViewDelegate /** * 用户主动滚动pickerView就会调用 */ - (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component { if (component == 0) { // 滚动省份的时候,刷新城市 // 记录当前选中的省份 _provinceIndex = [pickerView selectedRowInComponent:0]; // 刷新城市数据 [pickerView reloadComponent:1]; } // 给文本框赋值 // 获取选中的省份 Province *p = self.provinces[_provinceIndex]; // 获取选中的城市 NSInteger cityIndex = [pickerView selectedRowInComponent:1]; NSString *cityName = p.cities[cityIndex]; _cityField.text = [NSString stringWithFormat:@"%@ %@",p.name,cityName]; } /** * 自定义生日键盘 */ - (void)setupBirthdayKeyboard { // 创建UIDatePicker UIDatePicker *datePicker = [[UIDatePicker alloc] init]; _datePicker = datePicker; datePicker.locale = [NSLocale localeWithLocaleIdentifier:@"zh"]; datePicker.datePickerMode = UIDatePickerModeDate; // 添加监听 [datePicker addTarget:self action:@selector(dateChange:) forControlEvents:UIControlEventValueChanged]; // _birthdayField.inputView = datePicker; } /** * 当UIDatePicker滚动的时候调用 */ - (void)dateChange:(UIDatePicker *)datePicker { // NSLog(@"%@",datePicker.date); NSDateFormatter *fmt = [[NSDateFormatter alloc] init]; fmt.dateFormat = @"yyyy-MM-dd"; NSString *dateStr = [fmt stringFromDate:datePicker.date]; // 给生日文本框赋值 _birthdayField.text = dateStr; } #pragma mark - UITextFieldDelegate /** * 是否允许开始编辑 */ //- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField //{ // return NO; //} /** * 文本框开始编辑的时候调用 */ - (void)textFieldDidBeginEditing:(UITextField *)textField { if (textField == _birthdayField) { // 给生日文本框赋值 [self dateChange:_datePicker]; }else{ // 给城市文本框赋值 [self pickerView:_pickerView didSelectRow:0 inComponent:0]; } } /** * 是否允许用户输入文字 */ - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { return NO; } @end
2.Province模型
// // Province.h #import <Foundation/Foundation.h> @interface Province : NSObject @property(nonatomic,strong)NSArray *cities; @property(nonatomic,strong)NSString *name; + (instancetype)provinceWithDict:(NSDictionary *)dict; @end
// // Province.m #import "Province.h" @implementation Province + (instancetype)provinceWithDict:(NSDictionary *)dict { Province *p = [[self alloc] init]; [p setValuesForKeysWithDictionary:dict]; return p; } @end
3.省份城市数据plist
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <array> <dict> <key>cities</key> <array> <string>福州</string> <string>龙岩</string> <string>南平</string> <string>宁德</string> <string>莆田</string> <string>泉州</string> <string>三明</string> <string>厦门</string> <string>永安</string> <string>漳州</string> </array> <key>name</key> <string>福建</string> </dict> <dict> <key>cities</key> <array> <string>济南</string> <string>滨州</string> <string>德州</string> <string>东营</string> <string>肥城</string> <string>海阳</string> <string>菏泽</string> <string>济宁</string> <string>莱芜</string> <string>莱阳</string> <string>聊城</string> <string>临沂</string> <string>平度</string> <string>青岛</string> <string>青州</string> <string>日照</string> <string>泰安</string> <string>威海</string> <string>潍坊</string> <string>烟台</string> <string>枣庄</string> <string>章丘</string> <string>淄博</string> </array> <key>name</key> <string>山东</string> </dict> <dict> <key>cities</key> <array> <string>成都</string> <string>阿坝</string> <string>巴中</string> <string>崇州</string> <string>达州</string> <string>大邑</string> <string>德阳</string> <string>都江堰</string> <string>峨眉山</string> <string>甘孜</string> <string>广安</string> <string>广元</string> <string>江油</string> <string>金堂</string> <string>乐山</string> <string>泸州</string> <string>眉山</string> <string>绵阳</string> <string>内江</string> <string>南充</string> <string>攀枝花</string> <string>遂宁</string> <string>西昌</string> <string>雅安</string> <string>宜宾</string> <string>资阳</string> <string>自贡</string> </array> <key>name</key> <string>四川</string> </dict> <dict> <key>cities</key> <array> <string>昆明</string> <string>保山</string> <string>楚雄</string> <string>大理</string> <string>德宏</string> <string>迪庆</string> <string>个旧</string> <string>丽江</string> <string>临沧</string> <string>怒江</string> <string>曲靖</string> <string>思茅</string> <string>文山</string> <string>西双版纳</string> <string>玉溪</string> <string>昭通</string> </array> <key>name</key> <string>云南</string> </dict> <dict> <key>cities</key> <array> <string>东城区</string> <string>西城区</string> <string>崇文区</string> <string>宣武区</string> <string>海淀区</string> <string>朝阳区</string> <string>丰台区</string> <string>石景山区</string> <string>通州区</string> <string>顺义区</string> <string>房山区</string> <string>大兴区</string> <string>昌平区</string> <string>怀柔区</string> <string>平谷区</string> <string>门头沟区</string> <string>密云县</string> <string>延庆县</string> </array> <key>name</key> <string>北京</string> </dict> <dict> <key>cities</key> <array> <string>石家庄</string> <string>保定</string> <string>泊头</string> <string>沧州</string> <string>承德</string> <string>邯郸</string> <string>河间</string> <string>衡水</string> <string>廊坊</string> <string>秦皇岛</string> <string>任丘</string> <string>唐山</string> <string>邢台</string> <string>张家口</string> </array> <key>name</key> <string>河北</string> </dict> <dict> <key>cities</key> <array> <string>南京</string> <string>常州</string> <string>高邮</string> <string>淮安</string> <string>连云港</string> <string>南通</string> <string>苏州</string> <string>宿迁</string> <string>太仓</string> <string>泰州</string> <string>无锡</string> <string>新沂</string> <string>徐州</string> <string>盐城</string> <string>扬州</string> <string>镇江</string> </array> <key>name</key> <string>江苏</string> </dict> <dict> <key>cities</key> <array> <string>台北</string> <string>高雄</string> <string>台南</string> <string>台中</string> </array> <key>name</key> <string>台湾</string> </dict> <dict> <key>cities</key> <array> <string>沈阳</string> <string>鞍山</string> <string>本溪</string> <string>朝阳</string> <string>大连</string> <string>丹东</string> <string>抚顺</string> <string>阜新</string> <string>葫芦岛</string> <string>锦州</string> <string>辽阳</string> <string>盘锦</string> <string>铁岭</string> <string>营口</string> </array> <key>name</key> <string>辽宁</string> </dict> <dict> <key>cities</key> <array> <string>长春</string> <string>白城</string> <string>白山</string> <string>珲春</string> <string>吉林</string> <string>辽源</string> <string>龙井</string> <string>舒兰</string> <string>四平</string> <string>松原</string> <string>通化</string> <string>延边</string> </array> <key>name</key> <string>吉林</string> </dict> <dict> <key>cities</key> <array> <string>呼和浩特</string> <string>阿拉善盟</string> <string>巴彦淖尔盟</string> <string>包头</string> <string>赤峰</string> <string>鄂尔多斯</string> <string>呼伦贝尔</string> <string>通辽</string> <string>乌海</string> <string>乌兰察布盟</string> <string>锡林郭勒盟</string> <string>兴安盟</string> </array> <key>name</key> <string>内蒙古</string> </dict> <dict> <key>cities</key> <array> <string>杭州</string> <string>北仑</string> <string>慈溪</string> <string>奉化</string> <string>湖州</string> <string>嘉兴</string> <string>金华</string> <string>丽水</string> <string>临海</string> <string>宁波</string> <string>宁海</string> <string>衢州</string> <string>三门</string> <string>绍兴</string> <string>台州</string> <string>天台</string> <string>温岭</string> <string>温州</string> <string>仙居</string> <string>象山</string> <string>义乌</string> <string>余姚</string> <string>舟山</string> </array> <key>name</key> <string>浙江</string> </dict> <dict> <key>cities</key> <array> <string>拉萨</string> <string>阿里</string> <string>昌都</string> <string>林芝</string> <string>那曲</string> <string>日喀则</string> <string>山南</string> </array> <key>name</key> <string>西藏</string> </dict> <dict> <key>cities</key> <array> <string>西宁</string> <string>果洛</string> <string>海北</string> <string>海东</string> <string>海南</string> <string>海西</string> <string>黄南</string> <string>玉树</string> </array> <key>name</key> <string>青海</string> </dict> <dict> <key>cities</key> <array> <string>澳门</string> </array> <key>name</key> <string>澳门</string> </dict> <dict> <key>cities</key> <array> <string>武汉</string> <string>鄂州</string> <string>恩施</string> <string>黄冈</string> <string>黄石</string> <string>荆门</string> <string>荆州</string> <string>潜江</string> <string>十堰</string> <string>随州</string> <string>天门</string> <string>仙桃</string> <string>咸宁</string> <string>襄樊</string> <string>孝感</string> <string>宜昌</string> </array> <key>name</key> <string>湖北</string> </dict> <dict> <key>cities</key> <array> <string>哈尔滨</string> <string>大庆</string> <string>大兴安岭</string> <string>鹤岗</string> <string>黑河</string> <string>虎林</string> <string>鸡西</string> <string>佳木斯</string> <string>密山</string> <string>牡丹江</string> <string>宁安</string> <string>七台河</string> <string>齐齐哈尔</string> <string>双鸭山</string> <string>绥化</string> <string>五常</string> <string>伊春</string> </array> <key>name</key> <string>黑龙江</string> </dict> <dict> <key>cities</key> <array> <string>南宁</string> <string>百色</string> <string>北海</string> <string>北流</string> <string>崇左</string> <string>防城港</string> <string>贵港</string> <string>桂林</string> <string>桂平</string> <string>河池</string> <string>贺州</string> <string>来宾</string> <string>柳州</string> <string>钦州</string> <string>梧州</string> <string>宜州</string> <string>玉林</string> </array> <key>name</key> <string>广西</string> </dict> <dict> <key>cities</key> <array> <string>郑州</string> <string>安阳</string> <string>鹤壁</string> <string>济源</string> <string>焦作</string> <string>开封</string> <string>洛阳</string> <string>漯河</string> <string>南阳</string> <string>平顶山</string> <string>濮阳</string> <string>三门峡</string> <string>商丘</string> <string>新乡</string> <string>信阳</string> <string>许昌</string> <string>周口</string> <string>驻马店</string> </array> <key>name</key> <string>河南</string> </dict> <dict> <key>cities</key> <array> <string>太原</string> <string>长治</string> <string>大同</string> <string>晋城</string> <string>晋中</string> <string>临汾</string> <string>吕梁</string> <string>朔州</string> <string>忻州</string> <string>阳泉</string> <string>运城</string> </array> <key>name</key> <string>山西</string> </dict> <dict> <key>cities</key> <array> <string>重庆</string> </array> <key>name</key> <string>重庆</string> </dict> <dict> <key>cities</key> <array> <string>南昌</string> <string>抚州</string> <string>赣州</string> <string>吉安</string> <string>景德镇</string> <string>九江</string> <string>萍乡</string> <string>上饶</string> <string>新余</string> <string>宜春</string> <string>鹰潭</string> </array> <key>name</key> <string>江西</string> </dict> <dict> <key>cities</key> <array> <string>天津</string> </array> <key>name</key> <string>天津</string> </dict> <dict> <key>cities</key> <array> <string>银川</string> <string>固原</string> <string>石嘴山</string> <string>吴忠</string> <string>中卫</string> </array> <key>name</key> <string>宁夏</string> </dict> <dict> <key>cities</key> <array> <string>西安</string> <string>安康</string> <string>宝鸡</string> <string>汉中</string> <string>商洛</string> <string>铜川</string> <string>渭南</string> <string>咸阳</string> <string>兴平</string> <string>延安</string> <string>榆林</string> </array> <key>name</key> <string>陕西</string> </dict> <dict> <key>cities</key> <array> <string>上海</string> </array> <key>name</key> <string>上海</string> </dict> <dict> <key>cities</key> <array> <string>香港</string> </array> <key>name</key> <string>香港</string> </dict> <dict> <key>cities</key> <array> <string>广州</string> <string>潮州</string> <string>从化</string> <string>东莞</string> <string>佛山</string> <string>河源</string> <string>鹤山</string> <string>化州</string> <string>惠州</string> <string>江门</string> <string>揭阳</string> <string>茂名</string> <string>梅州</string> <string>清远</string> <string>汕头</string> <string>汕尾</string> <string>韶关</string> <string>深圳</string> <string>阳江</string> <string>云浮</string> <string>湛江</string> <string>肇庆</string> <string>中山</string> <string>珠海</string> </array> <key>name</key> <string>广东</string> </dict> <dict> <key>cities</key> <array> <string>兰州</string> <string>白银</string> <string>定西</string> <string>甘南</string> <string>嘉峪关</string> <string>酒泉</string> <string>临夏</string> <string>陇南</string> <string>平凉</string> <string>庆阳</string> <string>天水</string> <string>武威</string> <string>张掖</string> </array> <key>name</key> <string>甘肃</string> </dict> <dict> <key>cities</key> <array> <string>贵阳</string> <string>安顺</string> <string>毕节</string> <string>都匀</string> <string>凯里</string> <string>六盘水</string> <string>铜仁</string> <string>兴义</string> <string>遵义</string> </array> <key>name</key> <string>贵州</string> </dict> <dict> <key>cities</key> <array> <string>乌鲁木齐</string> <string>阿克苏</string> <string>阿拉尔</string> <string>阿图什</string> <string>博乐</string> <string>昌吉</string> <string>哈密</string> <string>和田</string> <string>喀什</string> <string>克拉玛依</string> <string>库尔勒</string> <string>石河子</string> <string>图木舒克</string> <string>吐鲁番</string> <string>五家渠</string> <string>伊宁</string> </array> <key>name</key> <string>新疆</string> </dict> <dict> <key>cities</key> <array> <string>长沙</string> <string>常德</string> <string>郴州</string> <string>衡阳</string> <string>怀化</string> <string>吉首</string> <string>耒阳</string> <string>冷水江</string> <string>娄底</string> <string>韶山</string> <string>邵阳</string> <string>湘潭</string> <string>湘乡</string> <string>益阳</string> <string>永州</string> <string>岳阳</string> <string>张家界</string> <string>株州</string> </array> <key>name</key> <string>湖南</string> </dict> <dict> <key>cities</key> <array> <string>合肥</string> <string>安庆</string> <string>蚌埠</string> <string>亳州</string> <string>巢湖</string> <string>池州</string> <string>滁州</string> <string>阜阳</string> <string>淮北</string> <string>淮南</string> <string>黄山</string> <string>黄山景区</string> <string>九华山景区</string> <string>六安</string> <string>马鞍山</string> <string>青阳</string> <string>宿州</string> <string>铜陵</string> <string>芜湖</string> <string>宣城</string> </array> <key>name</key> <string>安徽</string> </dict> <dict> <key>cities</key> <array> <string>海口</string> <string>儋州</string> <string>东方</string> <string>琼海</string> <string>三亚</string> <string>万宁</string> <string>文昌</string> <string>五指山</string> </array> <key>name</key> <string>海南</string> </dict> </array> </plist>
时间: 2024-11-20 15:18:27