1.简单地取值控件示例

我们要做的一个UITextFiled,当点击UITextFiled,出现一个UIPick取值的页面,可以选择性别,在viewDidLoad中写下

//sexPicker
UIPickerView *sexPicker=[[UIPickerView alloc]init];
sexPicker.showsSelectionIndicator=YES;
sexPicker.delegate=self;
sexPicker.dataSource=self;
self.sex.inputView=sexPicker;

对于数据源回调函数和代理回调函数的实现,代码如下:

 #pragma sexPicker
-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
return rSexComponentCount;
} -(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
return rSexRowCount;
} -(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
if(==row)
{
return @"Male";
}
else
{
return @"Female";
}
} -(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
if (==row) {
self.sex.text=@"Male";
}
else
{
self.sex.text=@"FeMale";
}
}

显示结果如图:

2.UIPickData的使用

在viewDidLoad中添加如下代码:

//birthday Picker Choose
self.birthdate.clearButtonMode=UITextFieldViewModeNever;
UIDatePicker *birthPicker=[[UIDatePicker alloc]init];
birthPicker.datePickerMode=UIDatePickerModeDate;
//birthPicker.locale=[[NSLocale alloc]initWithLocaleIdentifier:<#(NSString *)#>];
NSDateFormatter *formatter=[[NSDateFormatter alloc]init];
formatter.dateFormat=@"MM-dd-yyyy";
NSString *stdDate=@"01-01-1990";
birthPicker.date=[formatter dateFromString:stdDate];
[birthPicker addTarget:self action:@selector(chooseDate:) forControlEvents:UIControlEventValueChanged];
self.birthdate.inputView=birthPicker;

其的触发事件函数

#pragma DatePicker
-(void)chooseDate:(UIDatePicker *)datePicker
{
NSDate *date=datePicker.date;
NSDateFormatter *formatter=[[NSDateFormatter alloc]init];
formatter.dateFormat=@"MM-dd-yyyy";
NSString *dateString=[formatter stringFromDate:date];
self.birthdate.text=dateString; //[showAllBarButton appendString:[[NSString alloc] initWithString:dateString]];
//self.barButtonItem.title=showAllBarButton; }

运行结果:

3.自定义UIPicker的选项外观

除了通过简单的字符串进行UIPicker的显示之外,系统也提供了自定义视图的方法来为每一个选项进行自定义,API如下:

-(UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view

虽然在每次调用此方法时都重新生成一个全新的UIView子类对象,配置完后返回给调用者也能够达到自定义选项的效果。不过就像UITableView的重用机制般,这里也必须考虑到当选项数量特别巨大时,有理由使用此代理方法提供的reusingView参数来重用之前的视图。

所以为了方便维护和扩展起见,专门新建一个自定义的UIView子类比较好,取名为customRowView,考虑到需要让此类有一定的外部配置功能,所以customRowView的头文件可以设置如下:

 #import <UIKit/UIKit.h>

 #define CUSTOM_HEIGHT 60.0f
#define CUSTOM_WIDTH 240.0f @interface HBCustomRowView : UIView
{
@private
UIImageView *_photoView;
UILabel *_nameLabel;
} @property(nonatomic,retain) UIImage *photo;
@property(nonatomic,retain) NSString *name; @end

上述代码中,两个属性photo和name是专供外部进行重用配置的,而长度的宏定义是为新建对象和实现特定UIPicker代理方法服务。

- (void)drawRect:(CGRect)rect
{
// Drawing code
//照片
if (!_photoView) {
_photoView = [[UIImageView alloc]initWithFrame:CGRectMake(10.0f, 0.0f, CGRectGetWidth(self.frame)-50.0f, CGRectGetHeight(self.frame))]; _photoView.backgroundColor = [UIColor clearColor];
[self addSubview:_photoView];
} _photoView.image=self.photo; //球员名字
if (!_nameLabel) {
_nameLabel = [[UILabel alloc] initWithFrame:CGRectMake(CGRectGetMaxX(_photoView.frame), 0.0f, CGRectGetWidth(self.frame)-CGRectGetMaxX(_photoView.frame)-5.0f, CGRectGetHeight(self.frame))];
_nameLabel.backgroundColor = [UIColor clearColor];
_nameLabel.textAlignment = NSTextAlignmentRight;
_nameLabel.textColor = [UIColor darkGrayColor];
_nameLabel.shadowColor = [UIColor blackColor];
_nameLabel.shadowOffset = CGSizeMake(1.0f, 1.0f);
_nameLabel.numberOfLines=;
_nameLabel.font = [UIFont systemFontOfSize:14.0f]; [self addSubview:_nameLabel];
}
_nameLabel.text=self.name;
}

然后需要UIPickerView准备一个数据源对象和代理对象,此对象的相关代码实现如下:

#pragma mark-
#pragma mark UIPicker datasource
//几列
-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
//只显示球员
return ;
} //每列多少行选项
-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
return _datasource.count;
} #pragma mark-
#pragma mark UIPicker delegate
//每列的宽度
-(CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component
{
return 240.0f;
} //每列的高
-(CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component
{
return 60.0f;
} //那列第几行的内容的标题
-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
return @"";
} //选中任何列的某一行
-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
} //自定义UIPickerView的选项视图
-(UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view
{
HBCustomRowView *aCustomView = nil;
HBPlayerInfo *onePlayer =nil; //异常
if(row>=_datasource.count)
{
return [[UIView alloc]init];
}
//取出相应的球员对象
NSDictionary *player=[_datasource objectAtIndex:row];
onePlayer.name=[player objectForKey:@"name"];
onePlayer.role=[player objectForKey:@"role"];
onePlayer.number=[player objectForKey:@"number"];
if(view)
{
//重用
aCustomView=(HBCustomRowView *)view; //让重用的视图再次调用drawRect方法
[aCustomView setNeedsDisplay];
}
else
{
//新建
aCustomView =[[HBCustomRowView alloc]initWithFrame:CGRectMake(0.0f, 0.0f, 240.0f, 60.0f)];
aCustomView.backgroundColor=[UIColor clearColor];
} //配置自定义视图
aCustomView.photo = [UIImage imageNamed:@"gaolin.jpeg"];
aCustomView.name=onePlayer.name; return aCustomView;
}

IOS 取值控件(UIPicker)的使用方法的更多相关文章

  1. asp.net取HTML控件值

    asp.net取HTML控件值所有html表单里面的值控件,提交后都是以键值 key=value&key=value&……这样的形式提交给后台. radio也一样,会将选中的radio ...

  2. 无比迅速敏捷地开发iOS超精美控件

    目录 前言 设计 编码 PaintCode 前言 自从人生第一篇博客<iOS中的预编译指令的初步探究>问世以来 浏览量竟然达到了360多,(路过的大神勿笑!)这些浏览量使我兴奋异常但又令我 ...

  3. 从0到1搭建移动App功能自动化测试平台(2):操作iOS应用的控件

    转自:http://debugtalk.com/post/build-app-automated-test-platform-from-0-to-1-Appium-interrogate-iOS-UI ...

  4. tkinter中scale拖拉改变值控件(十一)

    scale拖拉改变值控件 使用户通过拖拽改变值 简单的实现: import tkinter wuya = tkinter.Tk() wuya.title("wuya") wuya. ...

  5. iOS基础UI控件介绍-Swift版

    iOS基础UI控件总结 iOS基础控件包括以下几类: 1.继承自NSObject:(暂列为控件) UIColor //颜色 UIImage //图像 2.继承自UIView: 只能相应手势UIGest ...

  6. iOS基本UI控件总结

    包括以下几类: //继承自NSObject:(暂列为控件) UIColor *_color;    //颜色 UIImage *_image;    //图像 //继承自UIView:只能相应手势UI ...

  7. iOS开发--UIKit控件之UISearchBar(搜索栏)

    今天因为需求原因,需要用到搜索控件:之前一直没有用到过这个控件,所以去百度了一下,找到一篇可以说很齐全的资料,感谢这位作者. 然而,我并没有找到可以更改字体大小的属性或方法,希望有知道的告诉我一声,谢 ...

  8. C#常用控件的属性以及方法(转载)

    -----以前看别人的,保存了下来,但是忘了源处,望见谅. C#常用控件属性及方法介绍 目录 1.窗体(Form) 2.Label (标签)控件 3.TextBox(文本框)控件 4.RichText ...

  9. WPF编程,通过Double Animation动态旋转控件的一种方法。

    原文:WPF编程,通过Double Animation动态旋转控件的一种方法. 版权声明:我不生产代码,我只是代码的搬运工. https://blog.csdn.net/qq_43307934/art ...

随机推荐

  1. 算法导论——lec 10 图的基本算法及应用

    搜索一个图是有序地沿着图的边訪问全部定点, 图的搜索算法能够使我们发现非常多图的结构信息, 图的搜索技术是图算法邻域的核心. 一. 图的两种计算机表示 1. 邻接表: 这样的方法表示稀疏图比較简洁紧凑 ...

  2. 【九】注入框架RoboGuice使用:(Your First Injected Service and BroadcastReceiver)

    上一篇我们简单的介绍了一下RoboGuice的使用([八]注入框架RoboGuice使用:(Your First Injected Fragment)),今天我们来看下服务(Service)和广播接受 ...

  3. HDOJ 1561 - 树形DP,泛化背包

    刚看题...觉得这不是棵树...可能有回路...仔细一想..这还真是棵树(森林)...这是由于每个城堡所需要提前击破的城堡至多一个..对于一个城堡.其所需提前击破的城堡作为其父亲构图.... dp[k ...

  4. commons-lang 包常用方法

      package com.java.utils; import java.util.Iterator; import java.util.Map;   import org.apache.commo ...

  5. Git--廖雪峰的博客的学习笔记

    为了督促自己能看完这个网站的学习教程,边看边做了些简要的笔记,记录了常用命令,其实也就是自己打了些简单的命令,好多直接就粘贴过来了,也算是一个学习的证明吧,想按详细的教程,还是要去博主的园子学习啊地址 ...

  6. Deep Learning(深度学习)学习笔记整理系列之(三)

    Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...

  7. 想买一套arduino玩玩

    对于物联网,去年才接触,认识但不熟悉.做过一个项目,买了一块树莓派,看了一段网络电视. 最近被邀分享一些关于物联网的东西,翻了些大学公开课,很系统但太偏理论和框架.听了一个TED感觉很不错,但太精简. ...

  8. Apache 编译扩展的方法

    下载源码包 进入源码包的modules目录 选择你要编译的.c文件 eg: /home/work/local/apache/bin/apxs -c -i -a mod_proxy_http.c 选项说 ...

  9. Hibernate学习

    一.Hibernate与触发器协同工作 Hibernate与数据库中的触发器协同工作,会造成两类问题 ----触发器使Session的缓存中的持久化对象与数据库中对应的数据不一致:触发器运行在数据库中 ...

  10. C# 控件包

    http://www.cnblogs.com/Keep-Silence-/archive/2013/01/22/2871694.html