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
复制代码

运行效果

 

posted on   低头捡石頭  阅读(35)  评论(0编辑  收藏  举报

编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示