• 城市数据模型
#import <Foundation/Foundation.h>@interface WQProvinceData : NSObject
/** 城市*/
@property (nonatomic, strong) NSArray *cities;
/** 城市名称*/
@property (nonatomic, strong) NSString *name;
+ (instancetype)provinceWithDict:(NSDictionary *)dict;
@end#import "WQProvinceData.h"@implementation WQProvinceData
+ (instancetype)provinceWithDict:(NSDictionary *)dict
{WQProvinceData *provinceData = [[WQProvinceData alloc]init];[provinceData setValuesForKeysWithDictionary:dict];return provinceData;
}
@end
  • 控制器
#import <UIKit/UIKit.h>@interface ViewController : UIViewController
@end#import "ViewController.h"
#import "WQProvinceData.h"
@interface ViewController ()<UITextFieldDelegate, UIPickerViewDataSource, UIPickerViewDelegate>
@property (weak, nonatomic) IBOutlet UITextField *birthdayField;
/**日期选择器*/
@property (nonatomic, strong) UIDatePicker *datePicker;
/**城市显示文本框*/
@property (weak, nonatomic) IBOutlet UITextField *cityField;
/**城市数据模型*/
@property (nonatomic, strong) NSMutableArray *provinceData;/**城市选择器*/
@property (nonatomic, strong) UIPickerView *pickerView;
/**当前选中省下标*/
@property (nonatomic, assign) NSInteger provinceIndex;
@end@implementation ViewController
// 懒加载,省,城数据
- (NSMutableArray *)provinceData
{if (_provinceData == nil){_provinceData = [NSMutableArray array];// 加载plist文件NSArray *arrFromPlist = [NSArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"provinces.plist" ofType:nil]];// 字典转模型[arrFromPlist enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {WQProvinceData *data = [WQProvinceData provinceWithDict:obj];[_provinceData addObject:data];}];}return _provinceData;
}
- (void)viewDidLoad {[super viewDidLoad];// 给日期输入框设置代理self.birthdayField.delegate = self;// 设置日期键盘[self setUpBirthDayKeyBoard];// 给城市输入框设置代理self.cityField.delegate = self;// 设置城市键盘[self setUpCityKeyBoard];
}// 不允许用户输入数据,只可以通过选择器选择(textField的代理方法)
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{return NO;
}
/***  设置日期选择*/
- (void)setUpBirthDayKeyBoard
{self.datePicker = [[UIDatePicker alloc]init];self.birthdayField.inputView = self.datePicker;self.datePicker.datePickerMode = UIDatePickerModeDate;self.datePicker.locale = [NSLocale localeWithLocaleIdentifier:@"zh"];// 给日期输入框添加监听器,用来监听数据的修改[self.datePicker addTarget:self action:@selector(birthdayFieldValueChange:) forControlEvents:UIControlEventValueChanged];
}// 监听开始编辑,用来初始文本框的显示
- (void)textFieldDidBeginEditing:(UITextField *)textField
{if (textField == self.birthdayField) {[self birthdayFieldValueChange:self.datePicker];}else if (textField == self.cityField){[self pickerView:self.pickerView didSelectRow:0 inComponent:0];}}
// 给日期 text赋值
- (void)birthdayFieldValueChange:(UIDatePicker *)datePicker
{NSDate *date = datePicker.date;NSDateFormatter *formatter = [[NSDateFormatter alloc]init];formatter.dateFormat = @"yy-MM-dd";NSString *dateStr = [formatter stringFromDate:date];self.birthdayField.text = dateStr;
}#pragma mark - -----城市选择器
/***  设置城市键盘*/
- (void)setUpCityKeyBoard
{// 修改文本输入框弹出键盘的样式self.pickerView = [[UIPickerView alloc]init];self.cityField.inputView = self.pickerView;// 设置数据源和代理self.pickerView.dataSource = self;self.pickerView.delegate = self;
}// 城市选择器,只有省和该省城市两列
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{return 2;
}
// 返回当前component列的行数
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{if (component == 0) {return self.provinceData.count;}else{WQProvinceData *tempData = self.provinceData[_provinceIndex];return tempData.cities.count;}
}
// 返回component列row行显示的数据
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{if (component == 0) {WQProvinceData *tempData = self.provinceData[row];return tempData.name ;}else{WQProvinceData *tempData = self.provinceData[_provinceIndex];return tempData.cities[row];}
}
// 滚动UIPickerView就会调用
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{// 如果滚动的时省if(component == 0){// 当前获取到当前选择的省的下标_provinceIndex = [pickerView selectedRowInComponent:0];// 刷新第一列城市的数据[self.pickerView reloadComponent:1];// 刷新城市后,让城市显示第一个[self.pickerView selectRow:0 inComponent:1 animated:YES];}// 获取当前省的数据模型WQProvinceData *proData = self.provinceData[_provinceIndex];// 获取当前城市的下标NSInteger cityIndex = [pickerView selectedRowInComponent:1];// 将数据显示到textfield上self.cityField.text = [NSString stringWithFormat:@"%@ - %@",proData.name, proData.cities[cityIndex]];
}
@end

UIPickerView - 城市选择相关推荐

  1. Ajax弹出式无刷新城市选择特效

    为什么80%的码农都做不了架构师?>>>    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional// ...

  2. android仿ios城市选择,Android 省市区三级联动选择器(仿iOS滚轮实现)

    前言 在实际的项目中需要使用到省市区三级联动的功能,在网上找来找去,都没有找到一个合适的库, 所以自己就封装了一个,不需要自己添加数据源,直接引用即可,一行代码搞定城市选择.怎么简单,怎么方便,怎么来 ...

  3. 七十一、Vue项目城市选择页搜索逻辑实现,边输入边搜索功能的解决办法:节流函数

    2020/10/30. 周五.今天又是奋斗的一天. @Author:Runsen 写在前面:我是「Runsen」,热爱技术.热爱开源.热爱编程.技术是开源的.知识是共享的.大四弃算法转前端,需要每天的 ...

  4. 六十九、完成Vue项目城市选择页,路由配置,搜索框布局、列表布局、BetterScroll 的使用和字母表布局

    2020/10/28. 周三.今天又是奋斗的一天. @Author:Runsen 写在前面:我是「Runsen」,热爱技术.热爱开源.热爱编程.技术是开源的.知识是共享的.大四弃算法转前端,需要每天的 ...

  5. jquery插件课程1 幻灯片、城市选择、日期时间选择、拖放、方向拖动插件

    jquery插件课程1  幻灯片.城市选择.日期时间选择.拖放.方向拖动插件 一.总结 一句话总结:都是jquery插件,都还比较小,参数(配置参数.数据)一般都是通过json传递. 1.插件配置数据 ...

  6. html5 a-z字母排序,Mint UI实现A-Z字母排序的城市选择列表

    本文实例为大家分享了Mint Ul实现A-Z字母排序的城市选择列表的具体代码,供大家参考,具体内容如下 效果图如下: 项目文件存放路径图: 所有代码如下: import city from " ...

  7. html 12306页面实现,jQuery模拟12306城市选择框功能简单实现方法示例

    本文实例讲述了jQuery模拟12306城市选择框功能简单实现方法.分享给大家供大家参考,具体如下: www.jb51.net jQuery城市选择框 #parent{ width:500px; po ...

  8. javascript 打造城市选择控件,兼容IE6以及以上,谷歌,Firefox

    在淘宝旅行上看到的城市选择效果,感觉还不错,就自己的理解重新实现一遍,先看效果,然后再细说实现原理,支持鼠标上下键选择城市,支持直接输入城市名称,拼音首字母,全拼,支持IE6遮盖SELECT,压缩后1 ...

  9. 独立完成一个城市选择组件(阿里前端题目,内附知识点、思路)

    借用了两个久经考验的轮子:fastClick和better-scroll,介意可以就此打住.本文绝对原创,手打,思路清晰,知识不难,不适合大佬观看,谢谢. 首先说一下,我不是阿里的人,也没去阿里面试过 ...

最新文章

  1. GeoIP的使用 - PHP版
  2. C#学习Error问题:“System.NullReferenceException:未将对象引用设置到对象的实例”
  3. autosys file watcher 注意事项
  4. python没有库_Python开发者必备6个基本库,这个都没有怎么做开发呢
  5. String转Double
  6. RFC2616-HTTP1.1-Methods(方法规定部分—单词注释版)
  7. python基础知识——异常
  8. 苹果计算机重装系统步骤,苹果笔记本电脑重装mac系统教程
  9. jason表情包在线生成源码
  10. 发布一个水晶报表的通用类:CrystalHelper
  11. audio音频使用天坑
  12. 群晖NAS 7.X 搭建个人博客网站并发布公网 1/8
  13. 微信小程序 图片上传与内容安全审核
  14. [笔记] 关于KAG3中宏参数的类型
  15. 仙侣奇缘2 无法 启动mysql_仙侣奇缘2服务端
  16. 怎么使用讯捷CAD编辑器执行编辑命令?
  17. 什么是蜘蛛池的搜索留痕技术
  18. ActiveSync同步Emulator
  19. TMF单片机开发框架精简版入门
  20. 亚信前端实习生面试记录

热门文章

  1. 如何在Excel表格中输入分数?学会这几招轻松搞定!
  2. Java入门基础:剪刀石头布小游戏,练习if else和while等
  3. android 游戏移植 (一) (文末有福利) | SDL 西游释厄传调试
  4. lucene 使用教程
  5. 基于ueditor开发的仿QQ空间照片上传功能
  6. 非人学园找不到在哪个服务器了,非人学园手游开服表_非人学园手游开服时间表_新服新区预告_第一手游网...
  7. PTA 用java编写 7-5 游戏角色选择
  8. H5手机移动端WEB开发资源整合 常用的标签及注意事项
  9. 学生护眼灯怎么选择?平价且护眼的护眼灯推荐
  10. unity 之 物理材质(PhysicMaterial)