详解iOS App中UIPickerView滚动选择栏的添加方法

1.UIPickerView的宽度和高度是固定的,纵向是320216,横向是568162

2.属性:

代码如下:

@property(nonatomic,readonly)NSInteger numberOfComponents; // 选择框的行数

@property(nonatomic,assign)idUIPickerViewDataSource> dataSource; (类似于UITableView)

@property(nonatomic,assign)idUIPickerViewDelegate>delegate; (类似于UITableView)

(BOOL)showsSelectionIndicator// 是否显示选择指示器 ,即是一个蓝色的条

pickerView = [[UIPickerView alloc] initWithFrame:CGRectMake(0, 0, 320, 216)]; 
//    指定Delegate 
    pickerView.delegate=self; 
//    显示选中框 
    pickerView.showsSelectionIndicator=YES; 
    [self.view addSubview:pickerView];

以上可以在视图显示一个选取器,但是内容空白,pickerView.showsSelectionIndicator=YES;是这只当前选取器所选中的内容:

选取器上显示数据,必须依赖两个协议,UIPickerViewDelegate和UIPickerViewDataSource,把他们添加到ViewController.h文件中

代码如下:

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController<UIPickerViewDelegate,UIPickerViewDataSource> 
{

UIPickerView *pickerView; 
    NSArray *pickerData;

}

@end

3.然后在.m文件的ViewDidLoad中初始化界面

代码如下:

- (void)viewDidLoad 

    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib.

pickerView = [[UIPickerView alloc] initWithFrame:CGRectMake(0, 0, 320, 216)]; 
//    指定Delegate 
    pickerView.delegate=self; 
//    显示选中框 
    pickerView.showsSelectionIndicator=YES; 
    [self.view addSubview:pickerView];

NSArray *dataArray = [[NSArray alloc]initWithObjects:@"许嵩",@"周杰伦",@"梁静茹",@"许飞",@"凤凰传奇",@"阿杜",@"方大同",@"林俊杰",@"胡夏",@"邱永传", nil];

pickerData=dataArray;

//     添加按钮    
    CGRect frame = CGRectMake(120, 250, 80, 40); 
    UIButton *selectButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    selectButton.frame=frame; 
    [selectButton setTitle:@"SELECT" forState:UIControlStateNormal];

[selectButton addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside];

[self.view addSubview:selectButton];

}

4.实现UIPickerView的代理方法,将数据显示在选取器上所需要几个方法

代码如下:

#pragma mark - 
#pragma mark Picker Date Source Methods

//返回显示的列数 
-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView 

    return 1; 

//返回当前列显示的行数 
-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component 

    return [pickerData count]; 
}

#pragma mark Picker Delegate Methods

//返回当前行的内容,此处是将数组中数值添加到滚动的那个显示栏上 
-(NSString*)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component 

    return [pickerData objectAtIndex:row]; 
}

前两个是数据源的代理方法,一个是返回列,有几个选取器就返回几,第二个是设置选取器有多少行,因为就这一个选取器,所以直接返回行数,即数组元素个数多少;第三个代理方法是将数组元素添加到了选取器上面显示;

说一下两个协议实例方法

UIPickerViewDelegate中的实例方法

代码如下:

// 当用户选择某个row时

- (void) pickerView: (UIPickerView *)pickerView didSelectRow: (NSInteger)row inComponent:                               (NSInteger)component

// 当其在绘制row内容,需要row的高度时

(CGFloat) pickerView:(UIPickerView *)pickerView rowHeightForComponent: (NSInteger) component
// 返回指定component.row显示的文本

(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger) component
// 当picker view需要给指定的component.row指定view时,调用此函数.返回值为用作row内容的view

(UIView *)pickerView: (UIPickerView *)pickerView view ForRow:(NSInteger) row forComponent:(NSInteger) component reusingView:(UIView *) view
// row的宽度

(CGFloat)pickerView: (UIPickerView *)pickerView widthForComponent:(NSInteger) component

UIPickerViewDataSource中的实例方法

按照官方文档的说法,UIPickerViewDataSource这个协议仅有的功能就是提供picker view中component的个数和各个component中的row的个数,虽然名为datasource,但是它工作于MVC的C中

本协议仅有两个实例方法,均需要实现:

代码如下:

// 返回列数

(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
// 返回每一列对应的行数

(NSInteger) pickerView:(UIPickerView *) pickerView numberOfRowsInComponent:(NSInteger) component

5.关于按钮响应事件,关于按钮的形成和添加响应事件不再提,前面都有,

代码如下:

(void) buttonPressed:(id)sender 

     NSInteger row =[pickerView selectedRowInComponent:0]; 
     NSString *selected = [pickerData objectAtIndex:row]; 
     NSString *message = [[NSString alloc] initWithFormat:@"你选择的是:%@",selected];

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示"  
                                                    message:message 
                                                   delegate:self 
                                          cancelButtonTitle:@"OK" 
                                          otherButtonTitles: nil]; 
    [alert show];

}

@UIPickerView还有其他实例方法

代码如下:

// 获取指定列的行数

- (NSInteger) numberOfRowsInComponent:(NSInteger)component

// 刷新所有的列

(void) reloadAllComponents
// 刷新指定的列

(void) reloadComponent: (NSInteger) component

(CGSize) rowSizeForComponent: (NSInteger) component

// 获取某列选择的行数

(NSInteger) selectedRowInComponent: (NSInteger) component
// 选择一行

(void) selectRow: (NSInteger)row inComponent: (NSInteger)component animated: (BOOL)animated

(UIView *) viewForRow: (NSInteger)row forComponent: (NSInteger)component

PS:多个component对应不同title的方法
有时候我们需要有多个component的UIPickerView并且对应不同的内容,比如地区的选择,需要有省份和城市两个选项,选择不同的省份,城市要相应发生变化。

下面假设component数量为2。

使用指定title的函数,根据[pickerView selectedRowInComponent:0]的不同来指定第二个component的title

代码如下:

- (NSString*)pickerView:(UIPickerView*)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
}

但此时,会发现切换省份后,城市一栏没有办法及时刷新。

我们还要指定刷新事件。

代码如下:

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
    [pickerView reloadComponent:1];
}

时间: 2016-05-22

IOS 开发之PickerView文字和随机数的使用

IOS 开发之PickerView文字和随机数的使用 PickerView用于展示供选择的内容(例如日期选取.点菜等). 有三种情况: 1.每一列都是独立的选取 2.右边的列受到左边列的影响 3.包含图片 PickerView和TableView类似,通过数据源来显示数据,与TableView同样地,让控制器称为其数据源. 但是PickerView的数据源仅仅提供行数和列数,在代理方法内才能设置内容. 通过两个数据源方法设置行和列数,通过一个代理方法来设定内容,注意component表示第几列:

IOS 开发之PickerView自定义视图的实例详解

IOS 开发之PickerView自定义视图的实例详解 例如选择国家,左边是名称右边是国家,不应该使用两列,而是自定义PickerView的一列,可以通过xib来实现. 注意,虽然PickerView也是一列,但是数据源方法是@required,所以必须实现. 因此,核心思想就是一列,自定义PickerView的行视图. 使用viewForRow方法可以设定行视图. 这样的视图可以通过xib和它的控制器进行封装: Xib的控制器继承自UIView类即可. 控制器维护一个用于设置数据的模型对象fl

实例讲解iOS应用开发中UIPickerView滚动选择栏的用法

基础 1.UIPickerView 属性 数据源(用来告诉UIPickerView有多少列多少行) 复制代码 代码如下: @property(nonatomic,assign) id dataSource; 代理(用来告诉UIPickerView每1列的每1行显示什么内容,监听UIPickerView的选择) 复制代码 代码如下: @property(nonatomic,assign) id   delegate; 是否要显示选中的指示器 复制代码 代码如下: @property(nonatom

iOS中自定义弹出pickerView效果(DEMO)

UIPickerView平常用的地方好像也不是很多,顶多就是一些需要选择的地方,这次项目需要这一个功能,我就单独写了一个简单的demo,效果图如下: 新增主页面弹出view,在主页面添加的代码 有个小问题就是第四个直接添加在主页弹出来的view好像被导航栏给覆盖了,我还没去研究,就着急的先吧功能写了.大家谅解下 最初版本 话说我终于弄了gif了,再也不要去截图每张图都发一遍了!! 这个demo呢,等于是可以拿来直接用的第三方了吧,只需要传数据就可以了,弹出的三个框显示的数据也不一样,我的封装能力

iOS App中UIPickerView选择栏控件的使用实例解析

UIPickerView控件是比UIDatePicker控件更普通的Picker控件,UIDatePicker控件可以理解成是从UIPickerView控件加工出来的专门进行日期选择的控件. UIPickerView控件的用法比UIDatePicker复杂一点.本文中的小例子将用UIPickerView控件做出两种效果,第一个只有一个转盘,第二个有两个转盘,但这两个转盘之间没有依赖关系,也就是说改变其中一个转盘中的选择,不会对第二个转盘产生影响.在下一篇文章会做一个转盘之间有依赖关系的例子. 下

详解iOS开发中UIPickerView控件的使用方法

UIPickerView控件在给用户选择某些特定的数据时经常使用到,这里演示一个简单的选择数据,显示在UITextField输入框里,把UIPickerView作为输入View,用Toolbar作为选定数据的按钮.和其他UITableView控件相似,UIPickerView也需要数据源. 我们要实现的效果如下: 下面开始使用的步骤. 1.打开XCode 4.3.2,新建一个Single View Application ,命名为PickerViewDemo,Company Identifier

iOS开发之UIPickerView实现城市选择器的步骤详解

前言 UIPickerView是一个选择器控件,它可以生成单列的选择器,也可生成多列的选择器,而且开发者完全可以自定义选择项的外观,因此用法非常灵活.UIPickerView直接继承了UIView,没有继承UIControl,因此,它不能像UIControl那样绑定事件处理方法,UIPickerView的事件处理由其委托对象完成. 本文借助于UIPickerView来实现城市选择器,第一列为省份,第二列为第一列省份对应的城市或者区,数据放在plist中,plist结构如下图所示,第一层是一个Di

IOS开发之tableView点击行跳转并带有“显示”更多功能

首先给大家展示下效果图,觉得还满意的话,请继续学习代码实现过程. 一,工程图. 二,代码. RootViewController.h #import <UIKit/UIKit.h> @interface RootViewController : UIViewController <UITableViewDelegate,UITableViewDataSource> { UITableView * _tableView; NSMutableArray * provinceArray;

IOS 开发之Object-C中的对象详解

IOS 开发之Object-C中的对象详解 前言 关于C语言的基础部分已经记录完毕,接下来就是学习Object-C了,编写oc程序需要使用Foundation框架.下面就是对oc中的对象介绍. 对象 对象和结构类似,一个对象可以保存多个相关的数据.在结构中,我们称这些数据为成员.而在对象中,称这些数据为实例变量.除了这些以外,对象和结构不用之处在于,对象还可以包含一组函数,并且这些函数可以使用对象所保存的数据,这类函数称为方法. 类 类(class)负责描述某个特点类型的对象,其中包括方法和实例

IOS开发之UIScrollView实现图片轮播器的无限滚动

IOS开发之UIScrollView实现图片轮播器的无限滚动 简介 在现在的一些App中常常见到图片轮播器,一般用于展示广告.新闻等数据,在iOS内并没有现成的控件直接实现这种功能,但是通过UIScrollView的允许分页设置,可以实现滚动轮播的功能. 轮播原理 UIScrollView对象有pagingEnable成员,如果设置为YES,那么每一个scrollView尺寸这么大的区域就会被当作一页,在滚动时会根据滚动的比例自动计算应该切换到哪一页. 无限滚动原理 要实现无限滚动,需要额外的两

IOS开发之@property的详细介绍

IOS开发之@property的详细介绍 在类中定义属性时,总会使用到@property进行定义,下面就来说说@property的使用. 在使用过程中,如果需求公开且在其他类中使用时,通常会定义在.h头文件中:而如果只是该类自已需要使用,这时则会定义 在.m实现文件中. 使用格式 @property (参数1, 参数2, 参数3, ...) 参数类型 参数名称 参数包括三个种类,七个属性,如下图所示. 在使用过程中,有几点需要注意: (1)原子性定义中,如果没有涉及到多线程环境时,通常不会使用默

IOS 开发之swift中UIView的扩展使用的实例

IOS 开发之swift中UIView的扩展使用的实例 扩展类代码: import UIKit extension UIView { // MARK : 坐标尺寸 var origin:CGPoint { get { return self.frame.origin } set(newValue) { var rect = self.frame rect.origin = newValue self.frame = rect } } var size:CGSize { get { return

iOS开发之UITableView与UISearchController实现搜索及上拉加载,下拉刷新实例代码

废话不多说了,直接给大家贴代码了. 具体代码如下所示: #import "ViewController.h" #import "TuanGouModel.h" #import "TuanGouTableViewCell.h" #define kDeviceWidth [UIScreen mainScreen].bounds.size.width #define kDeviceHeight [UIScreen mainScreen].bounds.

IOS 开发之swift中手势的实例详解

IOS 开发之swift中手势的实例详解 手势操作主要包括如下几类 手势 属性 说明 点击 UITapGestureRecognizer numberOfTapsRequired:点击的次数:numberOfTouchesRequired:点击时有手指数量 设置属性 numberOfTapsRequired 可以实现单击,或双击的效果 滑动 UISwipeGestureRecognizer direction:滑动方向 direction 滑动方向分为上Up.下Down.左Left.右Right

IOS 开发之NSURL基本操作

IOS 开发之NSURL基本操作 NSURL其实就是我们在浏览器上看到的网站地址,这不就是一个字符串么,为什么还要在写一个NSURL呢,主要是因为网站地址的字符串都比较复杂,包括很多请求参数,这样在请求过程中需要解析出来每个部门,所以封装一个NSURL,操作很方便: NSURL *url = [NSURL URLWithString:@"http://www.baidu.com/s?tn=baiduhome_pg&bs=NSRUL&f=8&rsv_bp=1&rsv