Xcode_7 iOS_9 普通选择器 Objective-C (8)
来源:互联网 发布:手机淘宝开了店在哪里 编辑:程序博客网 时间:2024/06/09 14:10
1、SingleViewApplication项目,拖一个pickerView控件、一个label和一个button,并且为pickerView和label定义输出口,为button添加事件触发。
2、viewController.h以及.m的代码如下,这里我们吧属性和事件触发声明都放在了头文件中,并且新建三个属性,我们这里用省份和城市来展现普通选择器,所以这三个属性分别是全部数据、当前省的数据和当前市的数据,因为之后还需要用到数据源的链接,所以还声明了委托协议和数据源协议:
//// ViewController.h// TestProject//// Created by 侯家奇 on 16/8/17.// Copyright © 2016年 侯家奇. All rights reserved.//#import <UIKit/UIKit.h>@interface ViewController : UIViewController <UIPickerViewDelegate, UIPickerViewDataSource>@property (nonatomic, strong) NSDictionary *pickerData; //保存全部数据@property (nonatomic, strong) NSArray *pickerProvincesData; //当前省的数据@property (nonatomic, strong) NSArray *pickerCitiesData; //当前市的数据@property (weak, nonatomic) IBOutlet UIPickerView *pickerView;@property (weak, nonatomic) IBOutlet UILabel *label;- (IBAction)onclick:(id)sender;- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView;- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component;- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component;- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component;@end
//// ViewController.m// TestProject//// Created by 侯家奇 on 16/8/17.// Copyright © 2016年 侯家奇. All rights reserved.//#import "ViewController.h"@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. NSBundle *bundle = [NSBundle mainBundle]; NSString *plistPath = [bundle pathForResource:@"provinces_cities" ofType:@"plist"]; NSDictionary *dict = [[NSDictionary alloc] initWithContentsOfFile:plistPath]; self.pickerData = dict; self.pickerProvincesData = [self.pickerData allKeys]; NSString *selectedProvince = [self.pickerProvincesData objectAtIndex:0]; self.pickerCitiesData = [self.pickerData objectForKey:selectedProvince]; self.pickerView.dataSource = self; self.pickerView.delegate = self;}- (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated.}- (IBAction)onclick:(id)sender { NSInteger row1 = [self.pickerView selectedRowInComponent:0]; NSInteger row2 = [self.pickerView selectedRowInComponent:1]; NSString *selected1 = [self.pickerProvincesData objectAtIndex:row1]; NSString *selected2 = [self.pickerCitiesData objectAtIndex:row2]; NSString *title = [[NSString alloc] initWithFormat:@"%@, %@", selected1, selected2]; self.label.text = title;}- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView { return 2;}- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component { if (component == 0) { return [self.pickerProvincesData count]; } else { return [self.pickerCitiesData count]; }}- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component { if (component == 0) { return [self.pickerProvincesData objectAtIndex:row]; } else { return [self.pickerCitiesData objectAtIndex:row]; }}- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component { if (component == 0) { NSString *selectedProvince = [self.pickerProvincesData objectAtIndex:row]; NSArray *array = [self.pickerData objectForKey:selectedProvince]; self.pickerCitiesData = array; [self.pickerView reloadComponent:1]; }}@end
关于数据源协议和委托协议,这里重写了四个方法,前两个是数据源协议,后两个数委托协议:
numberOfComponentsInPickerView:选择器中拨盘的数目。
pickerView:numberOfRowsInComponent:选择器中某个拨盘的行数。
pickerView:titleForRow:forComponent:为选择器中某个拨盘的行数提供显示数据。
pickerView:didSelectRow:inComponent:选中选择器的某个拨盘中的某行时调用。
4、这里我们需要一个资源文件:provinces_cities.plist可以直接用xcode新建,然后省份定义成array,就可以了,自己添加一些选项,目录结构如下:
关于数据源协议和委托协议的链接,可以通过代码的形式,也可以通过InterfaceBuilder工具,以上的代码中定义了连接
self.pickerView.dataSource = self; self.pickerView.delegate = self;
分别拖动即可:
0 0
- Xcode_7 iOS_9 普通选择器 Objective-C (8)
- Xcode_7 iOS_9 日期选择器 Objective-C (7)
- Xcode_7 iOS_9 Switch_SegmentControl_Slider 控件 Objective-C (2)
- Xcode_7 iOS_9 表视图 Objective-C (10)
- Xcode_7 iOS_9 索引栏 Objective-C (11)
- Xcode_7 iOS_9 静态表 Objective-C (12)
- Xcode_7 iOS_9 分页刷新 Objective-C (14)
- Xcode_7 iOS_9 textField和textView 关闭键盘 Objective-C (1)
- Xcode_7 iOS_9 工具栏_导航栏 Objective-C (4)
- Xcode_7 iOS_9 获取设备型号 Objective-C (5)
- Xcode_7 iOS_9 屏幕滚动视图 Objective-C (6)
- Xcode_7 iOS_9 集合视图_CollectionViewController Objective-C (9)
- Xcode_7 iOS_9 修改单元格_移动单元格 Objective-C (13)
- Xcode_7 iOS_9 模态视图 Objective-C (15)
- Xcode_7 iOS_9 平铺导航_标签导航 Objective-C (16)
- Xcode_7 iOS_9 树形结构导航 Objective-C (17)
- Xcode_7 iOS_9 ActiveIndicatorView_ProgressView_警告窗_操作表 控件 Objective-C (3)
- Objective-C选择器 Selector
- layer弹窗
- word-break/word-wrap
- 读懂diff
- NYOJ 1261 音痴又音痴的LT
- tjut 3449
- Xcode_7 iOS_9 普通选择器 Objective-C (8)
- 想知道深度学习卷积在GPU上如何优化吗?“大神”赵开勇带你深入浅出
- mac 上 react native 8081端口被占用
- Test测试
- 电脑重启后启动Openstack
- Qt如何使QTreeWidget始终保持展开?
- linux清除多余的系统虚拟账号
- #172 Remove Element
- 了解android7了:多窗口支持