-常见的选择必须满足这两个协议,约定实施。一个为数据源协议

-托付协议负责控制控件UI、事件响应,
实现可选

-数据源协议负责控件与应用数据模型的桥梁,一般必须实现

@interface ViewController : UIViewController <UIPickerViewDelegate, UIPickerViewDataSource>

//
// ViewController.h
// PickViewSample
//
// Created by 李亚坤 on 14-10-21.
// Copyright (c) 2014年 李亚坤. All rights reserved.
// #import <UIKit/UIKit.h> @interface ViewController : UIViewController
<UIPickerViewDelegate, UIPickerViewDataSource>
// 普通选择器必须满足这两个协议,一个为托付协议,一个为数据源协议
// 托付协议负责控制控件UI、事件响应, 实现可选
// 数据源协议负责控件与应用数据模型的桥梁,一般必须实现
@property (weak, nonatomic) IBOutlet UIPickerView *pickerView; @property (weak, nonatomic) IBOutlet UILabel *label; @property (nonatomic, strong) NSDictionary *pickerData; // 保存所有数据
@property (nonatomic, strong) NSArray *pickerProvincesData; // 当前省数据
@property (nonatomic, strong) NSArray *pickerCitiesData; // 当前省以下的市数据 - (IBAction)onclick:(id)sender;
@end

//
// ViewController.m
// PickViewSample
//
// Created by 李亚坤 on 14-10-21.
// Copyright (c) 2014年 李亚坤. 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 *seletedProvince = [self.pickerProvincesData objectAtIndex: 0];
// objectforkey: 找到索引的数据
self.pickerCitiesData = [self.pickerData objectForKey:seletedProvince];
 
    self.pickView.dataSource = self;
    self.pickView.delegate = self;
} - (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
} - (IBAction)onclick:(id)sender {
// 设置选定的行索引从0開始
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;
} #pragma mark 实现协议UIpickerViewDataSource方法
- (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];
}
} #pragma mark 实现协议UIPickerViewDelegate方法
// 为选择器中某个拨轮的行提供显示数据
- (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 *seletedProvince = [self.pickerProvincesData objectAtIndex:row];
NSArray *array = [self.pickerData objectForKey:seletedProvince];
self.pickerCitiesData = array;
// 刷新
[self.pickerView reloadComponent:1];
}
} @end

关于托付和数据源的实现对象ViewController分配给UIPickerView的托付属性Delegate和数据源属性dataSource;

这一部分能够在InterfaceBuilder里面实现。分配会自己主动生成

-(void) viewDidLoad

{

...

self.pickerView.dataSource = self;

self.pickerView.delegate = self;

}

版权声明:本文博客原创文章,博客,未经同意,不得转载。

常见的选择&lt;数据源协议,委托协议&gt;(IOS发展)的更多相关文章

  1. 【IOS 开发】Objective - C 面向对象高级特性 - 包装类 | 类处理 | 类别 | 扩展 | 协议 | 委托 | 异常处理 | 反射

    一. Objective-C 对象简单处理 1. 包装类 (1) 包装类简介 NSValue 和 NSNumber : -- 通用包装类 NSValue : NSValue 包装单个 short, i ...

  2. 动态选路、RIP协议&&OSPF协议详解

    动态选路.RIP协议&&OSPF协议详解 概念 当相邻路由器之间进行通信,以告知对方每个路由器当前所连接的网络,这时就出现了动态选路.路由器之间必须采用选路协议进行通信,这样的选路协议 ...

  3. http协议tcp协议ip协议三次握手四次挥手,为什么三次握手,为什么四次挥手,sockete套接字理解

    1.1 TCP是什么? TCP是Tranfer Control Protocol的简称,TCP协议是一种面向连接的.可靠的.基于字节流的运输层通信协议.通过TCP协议传输,得到的是一个顺序的无差错的数 ...

  4. Zookeeper——一致性协议:Zab协议

    Reference: https://www.jianshu.com/p/2bceacd60b8a 什么是Zab协议 Zab 协议的作用 Zab 协议原理 Zab 协议核心 Zab 协议内容 原子广播 ...

  5. 网络协议-webService协议

    webservice 协议 Web Service使用的是 SOAP (Simple Object Access Protocol)协议soap协议只是用来封装消息用的.封装后的消息你可以通过各种已有 ...

  6. OSI七层协议&TCP协议(三次握手四次挥手)

    今日内容 python 基础回顾 软件开发架构 网络理论前戏 OSI 七层协议(五层) TCP协议 三次握手与四次挥手 UDP协议 内容详细 一.python 基础回顾 1.基本数据类型 整型 int ...

  7. WLAN协议相关协议

    802.11协议 CAPWAP协议: RFC5415:https://tools.ietf.org/html/rfc5415 DTLS握手处理流程: RFC4347DTLS 认证: RFC5246 U ...

  8. 老李分享:HTTP协议之协议头

    老李分享:HTTP协议之协议头   当我们打开一个网页时,浏览器要向网站服务器发送一个HTTP请求头,然后网站服务器根据HTTP请求头的内容生成当次请求的内容发送给浏览器.你明白HTTP请求头的具体含 ...

  9. BOOTPROTO=[none|static|bootp|dhcp](引导时不使用协议|静态分配|BOOTP协议|DHCP协议)

     BOOTPROTO=[none|static|bootp|dhcp](引导时不使用协议|静态分配|BOOTP协议|DHCP协议) 

随机推荐

  1. 8、摄像头驱动_Linux的V4L2架构分析

    V4L2架构可以参考  linux-3.4.2\Documentation\video4linux\v4l2-framework.txt V4L2全名为Video For Linux 2,它是针对Li ...

  2. ztree实现左边动态生成树,右边为具体信息功能

    页面原型图: 图片.png 功能需求:点击左边树上的子节点,像后台发送请求,将请求到的信息展示在右边的表单里面 前端代码实现: 引入css文档: <link rel="styleshe ...

  3. ArcGIS Runtime支持的GP工具列表(转 )

    转自原文 ArcGIS Runtime支持的GP工具列表(转 ) 目前ArcGIS Runtime有两个版本 Basic 版本和Standard版本,而Basic版本不支持Geoprocessing( ...

  4. [Compose] 13. Lift into a Pointed Functor with of

    We examine the of function we've seen on a few types and discover it's the Pointed interface. Instea ...

  5. 【iOS】自己定义TabBarController

    一.自己定义的思路 iOS中的TabBarController确实已经非常强大了.大部分主流iOS应用都会採用. 可是往往也不能满足所有的需求,因此须要自己定义TabBar,自己定义须要对系统的Tab ...

  6. 从Handler+Message+Looper源代码带你分析Android系统的消息处理机制

    PS一句:不得不说CSDN同步做的非常烂.还得我花了近1个小时恢复这篇博客. 引言 [转载请注明出处:http://blog.csdn.net/feiduclear_up CSDN 废墟的树] 作为A ...

  7. expdp之后scp的惊险时刻

    今天在导出数据的时候.忽然就想起了上次导数据的惊险时刻. 当时导出数据,有40g.分盘./backup有几T的空间,非常easy.果断搞! 是daochu.dmp,导出后传到还有一个主机,还有一个主机 ...

  8. LUOGU 1525 关押罪犯 - 并查集拆点(对立点) / 二分+二分图染色

    传送门 分析: 并查集: 第一步先将所有矛盾从大至小排序,显然先将矛盾值大的分成两部分会更优. 普通的并查集都只能快速合并两个元素至同一集合,却不能将两个元素分至不同集合. 对于将很多数分成两个集合, ...

  9. luogu 3939 数颜色 - STL(vector)

    传送门 分析: 虽然颜色种类很多,但是所有颜色个数之和n是一定的,这时候就可以使用vector对每个颜色维护一个坐标集合,空间只占n个. 对于查询L,R:直接一行: upper_bound(col[c ...

  10. Erlang 转至维基百科

    Erlang(英语发音:/ˈɜrlæŋ/)是一种通用的并行程序设计语言,它由乔·阿姆斯特朗(Joe Armstrong)在瑞典电信设备制造商爱立信所辖的计算机科学研究室开发,目的是创造一种可以应付大规 ...