009 在Xcode4.5上创建IOS6.0应用 (高级控件 拾取器)

2023-12-10 02:38

本文主要是介绍009 在Xcode4.5上创建IOS6.0应用 (高级控件 拾取器),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

IOS中的高级控件拾取器

在学习这个高级控件之前先建立好项目




然后按照在   008 在Xcode4.5上创建IOS6.0应用 (多视图应用程序)》中的方法建立两个视图

最后在AppDelegate.m文件中添加如下代码(图中的红框内代码为新添加的代码)
注意要在AppDelegate.m文件中引入




第一种:时间拾取器
时间拾取器这个在实现起来最为简单
第一步在视图中添加控件


第二步:设置它的属性


第三步:编码实现其中的效果
FirstViewController.h
@interface FirstViewController : UIViewController{IBOutlet UIDatePicker *uidataPicker;
}@property(nonatomic,retain)UIDatePicker *uidataPicker;-(IBAction)onClick:(id)sender;@end


FirstViewController.m
@synthesize uidataPicker;-(IBAction)onClick:(id)sender{NSDate *selected = [uidataPicker date];NSString *message = [[NSString alloc] initWithFormat:@"您选择的日期是: %@",selected];UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"选择的日期"message:message delegate:nilcancelButtonTitle:@"OK"otherButtonTitles:nil, nil];[alert show];[alert release];[message release];
}- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];if (self) {self.title = NSLocalizedString(@"First", @"First");self.tabBarItem.image = [UIImage imageNamed:@"first"];}return self;
}- (void)viewDidLoad
{[super viewDidLoad];// Do any additional setup after loading the view, typically from a nib.
}- (void)didReceiveMemoryWarning
{[super didReceiveMemoryWarning];// Dispose of any resources that can be recreated.
}- (void)dealloc
{[uidataPicker release];[super dealloc];
}@end

第四步:为其控件连线


这样下来,一个简单的时间拾取器这样就完成了

第二种:单个标签拾取器(比较复杂)
第一步:加入控件-->实现输入输出--> 最后注意要输出数据一定要注意图中第3步


第二步:编码
需要注意的是要在SecondViewController.h文件中实现两个协议

< UIPickerViewDataSource,UIPickerViewDelegate>


源码如下:

@interface SecondViewController : UIViewController< UIPickerViewDataSource,UIPickerViewDelegate>{IBOutlet UIPickerView *pickView;NSArray * arr;
}@property (nonatomic,retain)UIPickerView *pickView;
@property (nonatomic,retain)NSArray * arr;-(IBAction)onClick:(id)sender;
@end

然后在SecondViewController.m文件中编码

实现协议后必须实现协议里面的三个方法分别为

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

-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{}

-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{}


然后必须在初始化的时候创建一个定义了拾取器中内容的数组

也就拾在ViewDidLoad方法中

NSArray *array = [[NSArrayalloc]initWithObjects:@"欧洲",@"南美洲", @"非洲",@"北美洲",@"亚洲",@"大洋洲",nil];


源代码如下:

@implementation SecondViewController@synthesize pickView;
@synthesize arr;-(IBAction)onClick:(id)sender{NSInteger row = [pickView selectedRowInComponent:0];NSString *selected = [arr objectAtIndex:row];NSString *title = [[NSString alloc] initWithFormat:@"您选择了 %@!",selected];UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"选择的日期"message:titledelegate:nilcancelButtonTitle:@"OK"otherButtonTitles:nil, nil];[alert show];[alert release];[title release];[selected release];
}//pragma mark 实现协议UIPickerViewDelegate方法
-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{return [arr objectAtIndex:row];
}//pragma mark 实现协议UIPickerViewDataSource方法
-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{return 1;
}-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{return [arr count];
}- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];if (self) {self.title = NSLocalizedString(@"Second", @"Second");self.tabBarItem.image = [UIImage imageNamed:@"second"];}return self;
}- (void)viewDidLoad
{[super viewDidLoad];NSArray *array = [[NSArray alloc] initWithObjects:@"欧洲",@"南美洲",@"非洲",@"北美洲",@"亚洲",@"大洋洲",nil];self.arr = array;[array release];
}- (void)didReceiveMemoryWarning
{[super didReceiveMemoryWarning];// Dispose of any resources that can be recreated.
}- (void)dealloc
{[pickView release];[arr release];[super dealloc];
}@end

最后再次提醒一定要加入上图第三步中的连线


最后再看看效果图



第三种:双标签拾取器(如果上面那个搞清楚了这个就相对比较简单)

由于这个只是把拾取器从1个变成了2个所以在定义集合变量的时候要定义两个

ThreeViewController.h

@interface ThreeViewController : UIViewController< UIPickerViewDataSource,UIPickerViewDelegate>{IBOutlet UIPickerView *pickView;NSArray * arr1;NSArray * arr2;
}@property (nonatomic,retain)UIPickerView *pickView;
@property (nonatomic,retain)NSArray * arr1;
@property (nonatomic,retain)NSArray * arr2;-(IBAction)onClick:(id)sender;@end

ThreeViewController.m文件也只要做点点的修改就行了,说白了,就拾一个变两个的过程

@implementation ThreeViewController@synthesize pickView;
@synthesize arr1;
@synthesize arr2;-(IBAction)onClick:(id)sender{NSInteger row1 = [pickView selectedRowInComponent:0];NSInteger row2 = [pickView selectedRowInComponent:1];NSString *selected1 = [arr1 objectAtIndex:row1];NSString *selected2 = [arr2 objectAtIndex:row2];NSString *title = [[NSString alloc] initWithFormat:@"您选择了%@中的%@!",selected1,selected2];UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"选择"message:titledelegate:nilcancelButtonTitle:@"OK"otherButtonTitles:nil, nil];[alert show];[alert release];[title release];[selected1 release];[selected2 release];
}//pragma mark 实现协议UIPickerViewDelegate方法
-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{if (component == 0) {return [arr1 objectAtIndex:row];}else if(component == 1){return [arr2 objectAtIndex:row];}else{return nil;}
}//pragma mark 实现协议UIPickerViewDataSource方法
-(NSInteger) numberOfComponentsInPickerView:(UIPickerView *)pickerView{return 2;
}-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{if (component ==0) {return [arr1 count];}else if (component == 1){return [arr2 count];}else{return 0;}
}- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];if (self) {self.title = NSLocalizedString(@"Three", @"Three");self.tabBarItem.image = [UIImage imageNamed:@"first"];}return self;
}- (void)viewDidLoad
{[super viewDidLoad];NSArray *array1 = [[NSArray alloc] initWithObjects:@"欧洲",@"南美洲",@"非洲",@"北美洲",@"亚洲",@"大洋洲",nil];NSArray *array2 = [[NSArray alloc] initWithObjects:@"足球",@"篮球",@"羽毛球",@"乒乓球",@"保龄球",@"铅球",nil];self.arr1 = array1;self.arr2 = array2;[array1 release];[array2 release];
}- (void)didReceiveMemoryWarning
{[super didReceiveMemoryWarning];// Dispose of any resources that can be recreated.
}- (void)dealloc
{[pickView release];[arr1 release];[arr2 release];[super dealloc];
}@end

第四种:双标签拾取器有联动效果(如果上面那个搞清楚了这个就相对比较简单)

有联动效果的拾取器相对与第三种稍微麻烦一点

首先来看看源代码

FourViewController.h

@interface FourViewController : UIViewController< UIPickerViewDataSource,UIPickerViewDelegate>{NSDictionary *date;IBOutlet UIPickerView *pickView;NSArray * arr1;NSArray * arr2;
}@property(nonatomic,retain)NSDictionary *date;@property (nonatomic,retain)UIPickerView *pickView;
@property (nonatomic,retain)NSArray * arr1;
@property (nonatomic,retain)NSArray * arr2;-(IBAction)onClick:(id)sender;
@end


FourViewController.m

@implementation FourViewController@synthesize date;
@synthesize pickView;
@synthesize arr1;
@synthesize arr2;//pragma mark 实现协议UIPickerViewDelegate方法
-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{if (component == 0) {return [arr1 objectAtIndex:row];}else if(component == 1){return [arr2 objectAtIndex:row];}else{return nil;}
}//pragma mark 实现协议UIPickerViewDataSource方法
-(NSInteger) numberOfComponentsInPickerView:(UIPickerView *)pickerView{return 2;
}-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{if (component ==0) {return [arr1 count];}else if (component == 1){return [arr2 count];}else{return 0;}
}//实现联动的效果
-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{if(component ==0){NSString *selectedCol1 = [self.arr1 objectAtIndex:row];NSArray *array = [self.date objectForKey:selectedCol1];self.arr2 = array;[self.pickView reloadComponent:1];}
}- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];if (self) {self.title = NSLocalizedString(@"Four", @"Four");self.tabBarItem.image = [UIImage imageNamed:@"second"];}return self;
}- (void)viewDidLoad
{[super viewDidLoad];NSBundle * bundle = [NSBundle mainBundle];NSString * plistPath = [bundle pathForResource:@"statedictionary"ofType:@"plist"];NSDictionary * dict = [[NSDictionary alloc] initWithContentsOfFile:plistPath];self.date = dict;[dict release];NSArray *col1 = [self.date allKeys];//下面这个方法是排序的意思NSArray *sorted = [col1 sortedArrayUsingSelector:@selector(compare:)];self.arr1 = sorted;NSArray *seleteCol1 = [self.arr1 objectAtIndex:0];NSArray *col2 = [self.date objectForKey:seleteCol1];self.arr2 = col2;}- (void)didReceiveMemoryWarning
{[super didReceiveMemoryWarning];// Dispose of any resources that can be recreated.
}- (void)dealloc
{[date release];[pickView release];[arr1 release];[arr2 release];[super dealloc];
}
@end

代码中与上一个有小区别的是

多了一个联动是调用的方法

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


还多了一个变量这个变量是字典变量

唯一不同的是这次获取内容是从文件中获取的


下面就来介绍一下定义文件的过程

第一步:看图建立文件



第二步:编辑文件中的内容(由于Xcode为我们提供了比较好的编辑工具所以文件编辑过程就不多做介绍)

但是要注意下图红框中的内容一但填错就得不到数据

在选择Root类型的时候一定要选择字典类型



最后看两张效果图片



最后拾取器就这样介绍完了,看了以上的介绍一定觉得拾取器还是比较简单的控键把。







这篇关于009 在Xcode4.5上创建IOS6.0应用 (高级控件 拾取器)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/475793

相关文章

kotlin中的行为组件及高级用法

《kotlin中的行为组件及高级用法》Jetpack中的四大行为组件:WorkManager、DataBinding、Coroutines和Lifecycle,分别解决了后台任务调度、数据驱动UI、异... 目录WorkManager工作原理最佳实践Data Binding工作原理进阶技巧Coroutine

Java逻辑运算符之&&、|| 与&、 |的区别及应用

《Java逻辑运算符之&&、||与&、|的区别及应用》:本文主要介绍Java逻辑运算符之&&、||与&、|的区别及应用的相关资料,分别是&&、||与&、|,并探讨了它们在不同应用场景中... 目录前言一、基本概念与运算符介绍二、短路与与非短路与:&& 与 & 的区别1. &&:短路与(AND)2. &:非短

Spring AI集成DeepSeek三步搞定Java智能应用的详细过程

《SpringAI集成DeepSeek三步搞定Java智能应用的详细过程》本文介绍了如何使用SpringAI集成DeepSeek,一个国内顶尖的多模态大模型,SpringAI提供了一套统一的接口,简... 目录DeepSeek 介绍Spring AI 是什么?Spring AI 的主要功能包括1、环境准备2

Spring AI与DeepSeek实战一之快速打造智能对话应用

《SpringAI与DeepSeek实战一之快速打造智能对话应用》本文详细介绍了如何通过SpringAI框架集成DeepSeek大模型,实现普通对话和流式对话功能,步骤包括申请API-KEY、项目搭... 目录一、概述二、申请DeepSeek的API-KEY三、项目搭建3.1. 开发环境要求3.2. mav

Python中conda虚拟环境创建及使用小结

《Python中conda虚拟环境创建及使用小结》本文主要介绍了Python中conda虚拟环境创建及使用小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们... 目录0.前言1.Miniconda安装2.conda本地基本操作3.创建conda虚拟环境4.激活c

使用Python创建一个能够筛选文件的PDF合并工具

《使用Python创建一个能够筛选文件的PDF合并工具》这篇文章主要为大家详细介绍了如何使用Python创建一个能够筛选文件的PDF合并工具,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录背景主要功能全部代码代码解析1. 初始化 wx.Frame 窗口2. 创建工具栏3. 创建布局和界面控件4

MobaXterm远程登录工具功能与应用小结

《MobaXterm远程登录工具功能与应用小结》MobaXterm是一款功能强大的远程终端软件,主要支持SSH登录,拥有多种远程协议,实现跨平台访问,它包括多会话管理、本地命令行执行、图形化界面集成和... 目录1. 远程终端软件概述1.1 远程终端软件的定义与用途1.2 远程终端软件的关键特性2. 支持的

Java中对象的创建和销毁过程详析

《Java中对象的创建和销毁过程详析》:本文主要介绍Java中对象的创建和销毁过程,对象的创建过程包括类加载检查、内存分配、初始化零值内存、设置对象头和执行init方法,对象的销毁过程由垃圾回收机... 目录前言对象的创建过程1. 类加载检查2China编程. 分配内存3. 初始化零值4. 设置对象头5. 执行

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

Python创建Excel的4种方式小结

《Python创建Excel的4种方式小结》这篇文章主要为大家详细介绍了Python中创建Excel的4种常见方式,文中的示例代码简洁易懂,具有一定的参考价值,感兴趣的小伙伴可以学习一下... 目录库的安装代码1——pandas代码2——openpyxl代码3——xlsxwriterwww.cppcns.c