UI基础 - UIPickerView
■ 简言
1. 选取器 UIPickerView 是用来取代 PC 上面的下拉菜单,它是一个大大的滚轮,尺寸固定 320×216
2. 选取器可以有多个表盘,每个都可以作为一个组件使用:UIPickerView 和 UITableView 类似,也需要一个数据源,不过选取器不使用索引路径,而是用一个 NSinteger 值来标识每一行
■ 使用方式
1. 实现一个省份选择器
1 #import "ViewController.h" 2 @interface ViewController ()<UIPickerViewDataSource,UIPickerViewDelegate> // 遵守协议 3 @property(nonatomic,strong)UIPickerView *pickerView; 4 @property(nonatomic,strong)NSMutableArray *provincesArray; // 数据源:省份 5 @property(nonatomic,strong)NSMutableArray *cityArray; // 数据源:省会 6 @end 7 8 @implementation ViewController 9 - (void)viewDidLoad { 10 [super viewDidLoad]; 11 12 // 数据源 13 NSString *str = [[NSBundle mainBundle] pathForResource:@"Provineces" ofType:@"plist"]; 14 self.provincesArray= [NSMutableArray arrayWithContentsOfFile:str]; 15 16 // UIPickerView 17 self.pickerView = [[UIPickerView alloc] initWithFrame:self.view.bounds]; 18 self.pickerView.delegate = self; 19 self.pickerView.dataSource = self; 20 self.pickerView.backgroundColor = [UIColor orangeColor]; 21 [self.view addSubview:self.pickerView]; 22 } 23 24 #pragma mark - <UIPickerViewDataSource> 25 // 组件个数 26 -(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{ 27 return 2; 28 } 29 30 // 组件行数 31 - (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{ 32 if (component == 0) { 33 return self.provincesArray.count; 34 } 35 return self.cityArray.count; 36 } 37 38 #pragma mark - <UIPickerViewDelegate> 39 // 高 40 -(CGFloat) pickerView:(UIPickerView *)pickerView rowHeightForComponent: (NSInteger) component{ 41 return 25; 42 } 43 44 // 宽 45 -(CGFloat)pickerView: (UIPickerView *)pickerView widthForComponent:(NSInteger) component{ 46 return 95; 47 } 48 49 // 显示内容 50 - (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{ 51 if (component == 0) { 52 return [[self.provincesArray objectAtIndex:row] objectForKey:@"ProvinceName"]; 53 } 54 return [[self.cityArray objectAtIndex:row] objectForKey:@"CityName"]; 55 } 56 57 // 当选中组件时 58 - (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{ 59 60 if (component == 0) { 61 self.cityArray =[[self.provincesArray objectAtIndex:row ] objectForKey:@"cities"]; 62 [self.pickerView selectRow:0 inComponent:1 animated:YES];// 选中指定组件 1,从下标 0 显示 63 [self.pickerView reloadComponent:1];// 刷新数据:指定组件 64 } 65 } 66 67 // 当给指定的 component.row 指定 view 时,触发该方法,返回值为用作 row 内容的 view 68 - (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view{ 69 70 UILabel *pickerLabel = (UILabel *) view; 71 if (!pickerLabel) { 72 pickerLabel = [[UILabel alloc] init]; 73 pickerLabel.adjustsFontSizeToFitWidth = YES; 74 pickerLabel.textAlignment = NSTextAlignmentCenter; 75 pickerLabel.layer.borderWidth = 3; 76 pickerLabel.backgroundColor = [UIColor cyanColor]; 77 pickerLabel.font = [UIFont systemFontOfSize:15]; 78 } 79 pickerLabel.text = [self pickerView:pickerView titleForRow:row forComponent:component]; 80 return pickerLabel; 81 } 82 83 @end
运行效果
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律