注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

熊猫正正的博客

熊猫正正的天空

 
 
 

日志

 
 

用StoryBoard构建Picker组件 XCode4.6.1  

2013-04-25 22:45:45|  分类: ios开发 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

使用TabbedApplication,子视图使用ViewController。

第一个Picker:日期选取器UIDatePicker:

#import 


@interface FirstViewController : UIViewController


@property (strongnonatomicIBOutlet UIDatePicker *datePicker;

                                                       //声明一个DatePicker实例


-(IBAction)buttonPressed;  //按钮触发的方法

@end


.m文件中,最主要的方法就是点击按钮弹出AlertView:

 

-(IBAction)buttonPressed

{

    NSDate *selected=[datePicker date]; //获取选取的date

    NSTimeZone *zone=[NSTimeZone systemTimeZone]; //得到系统时间

    

    NSInteger interval = [zone secondsFromGMTForDate: selected];

                                      //得到系统时间与默认时间的秒数差值

    

    selected = [selected dateByAddingTimeInterval: interval]; //将差值加进去

    

    

    NSString *message=[[NSString alloc]

                       initWithFormat:@"你所选取的日期和时间是%@",selected];

                  //将获取的信息储存在message

    UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"时间和日期选取" message:message delegate:nilcancelButtonTitle:@"确认" otherButtonTitles: nil];

    [alert show];

}


- (void)viewDidLoad

{

    [super viewDidLoad];

// Do any additional setup after loading the view, typically from a nib.

    NSDate *now=[NSDate date];

    [datePicker setDate:now animated:YES];   //将选取器初始化为当前时间

}

 


//////////////////////////////////////////////////////

第二个组件:用UIPicker实现选取 SecondViewController,依然是拖一个ViewController进StoryBoard。
.h文件:

#import 


@interface SecondViewController : UIViewController

        <</span>UIPickerViewDelegate,UIPickerViewDataSource //声明UIPicker的委托和数据源


@property (strongnonatomicIBOutlet UIPickerView *singlePicker;

                                //声明一个单视图实例

@property (strongnonatomicNSArray *pickerData;

                            //Picker所用的数据来源于此

-(IBAction)buttonPressed;

@end

.m文件

@synthesize singlePicker,pickerData;

- (void)viewDidLoad

{

    [super viewDidLoad];

NSArray *array=[[NSArray alloc]initWithObjects:

                        @"One",@"Two",@"Three",@"Four",@"Five" ,nil];

    

    self.pickerData=array;    //将数据导入缓存,避免总是读取硬盘

}

-(IBAction)buttonPressed

{

    NSInteger row=[singlePicker selectedRowInComponent:0];

                    //选取第一个组件(因为这个Picker只有一个组件)

    NSString *selected=[pickerData objectAtIndex:row];

    NSString *title=[[NSString alloc]initWithFormat:@"你所选择的为:%@",selected];

    UIAlertView *alert=[[UIAlertView alloc]initWithTitle:title message:@"谢谢选择" delegate:nil cancelButtonTitle:@"退出" otherButtonTitlesnil];

    [alert show];

}


#pragma mark

#pragma mark Picker Data Source Methods

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

    return 1;       //picker的组件数,即有几个竖行

}

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

    return [pickerData count];   //每个组件的行数

}


#pragma mark PickerDelegate Methods

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

    return [pickerData objectAtIndex:row];  //选取器指定行的数据

}

@end


//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
第三个组件:UIPicker中实现两列分别选取。添加ThirdVC.h/.m(即Objective-C Class)
.h文件及注释:

#import 

#define kRaceComponent 0      //Race组件的索引号为0

#define KHeroComponent 1

@interface ThirdVC : UIViewController

        <</span>UIPickerViewDelegate,UIPickerViewDataSource>


@property (strongnonatomicIBOutlet UIPickerView *doublePicker;

@property (strongnonatomicNSArray *Race;  //左边组件的Array

@property (strongnonatomicNSArray *Hero;


-(IBAction)buttonPressed;

@end


.m文件及注释:

- (void)viewDidLoad

{

    [super viewDidLoad];

NSArray *raceArray=[[NSArray alloc]

                        initWithObjects:@"暗夜",@"亡灵",@"人类",@"兽人"nil];

    self.Race=raceArray;

    

    NSArray *heroArray=[[NSArray alloc]

                        initWithObjects:@"骑士",@"弓箭手",@"火枪",@"步兵"nil];

    

    self.Hero=heroArray;

    

}

-(IBAction)buttonPressed

{

    NSInteger raceRow=[doublePicker selectedRowInComponent:0];

                    //获取第一个组件的行数

    NSInteger heroRow=[doublePicker selectedRowInComponent:1];

                    //获取第二个组件的行数

    NSString *race=[Race objectAtIndex:raceRow];

                    //获取Race数组已选取的字符串

    NSString *hero=[Hero objectAtIndex:heroRow];

                    //获取Hero数组已选取的字符串

    NSString *message=[[NSString alloc]

                       initWithFormat:@"你选的种族是%@,英雄是%@",race,hero];

                    //

    UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"谢谢你的选择" 
                            message:
message delegate:nil cancelButtonTitle:@"退出" otherButtonTitles:nil];

    [alert show];

    

}

#pragma mark----

#pragma mark Picker Data Source Methods


-(NSInteger) numberOfComponentsInPickerView:(UIPickerView *)pickerView

{

    return 2//设置picker的组件数

}

-(NSInteger) pickerView:(UIPickerView *)
                    pickerView numberOfRowsInComponent:(
NSInteger)component    //返回各组件的rows数量

{

    if(component==KHeroComponent)

        return [self.Hero count];

    //如果是Hero组件,则返回数组Hero的数量;如果是Race组件,则返回Race的数量;也可用switch组件

    return [self.Race count];

}

#pragma mark Picker Delegate Methods

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

                //返回正在选取的组件的字符串

{

    if(component==kRaceComponent)

        return [self.Race objectAtIndex:row];

      //如果组件是Race,则返回Race数组第row个组件字符串

    return [self.Hero objectAtIndex:row];

}

@end


////////////////////////////////////////////////////////////////////////////////////////////////
4.实现依赖组件:读取plist列表的数据,左边控制右边

#import 

#define raceComponent 0     //定义种族组件为第一个

#define soilderComponent 1   //定义兵组件

@interface FourVC : UIViewController

                        <</span>UIPickerViewDelegate,UIPickerViewDataSource>

                        //遵守Picker的数据源和委托的协议


@property (strongnonatomicIBOutlet UIPickerView *picker;


@property (strongnonatomicNSDictionary *allContent;  //定义字典存储plist列表所有数据

@property (strong,nonatomic NSArray *race; //存储Picker左侧列表

@property (strongnonatomicNSArray *soilder; //存储Picker右侧列表


-(IBAction)buttonPressed;  // 按钮方法

@end


- (void)viewDidLoad

{

    [super viewDidLoad];

    

NSBundle *bundle=[NSBundle mainBundle];

    NSURL *plistURL=[bundle URLForResource:@"list" withExtension:@"plist"];

                    //获取list.plistURL路径

    self.allContent=[NSDictionary dictionaryWithContentsOfURL:plistURL];

                    //将plist文件全部赋给字典

    NSArray *components=[self.allContent allKeys];

                        //获得字典中所有的键作为左侧组件的数据

    NSArray *firstComponents=

                    [components sortedArrayUsingSelector:@selector(compare:)];

                    //将键进行排序

    self.race=firstComponents;

                   //将排序后的键赋给race即左侧数组的数据

    NSString *selectedRace=[self.race objectAtIndex:0];

                    //将左侧的数组第一个元素提取

    NSArray *array=[allContent objectForKey:selectedRace];

                    //将字典中key为第一个元素的值即数组赋给右侧的数组作为数据

    self.soilder=array;  

}

-(IBAction)buttonPressed

{

    NSInteger raceRow=[picker selectedRowInComponent:0];

    //获取第一个组件的行数

    NSInteger soilerRow=[picker selectedRowInComponent:1];

    //获取第二个组件的行数

    NSString *raceN=[self.race objectAtIndex:raceRow];

    //获取Race数组已选取的字符串

    NSString *soilderN=[self.soilder objectAtIndex:soilerRow];

    //获取soilder数组已选取的字符串

    NSString *message=[[NSString alloc]

                       initWithFormat:@"你选的种族是%@,士兵是%@",raceN ,soilderN];

    //

    UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"谢谢你的选择" message:message delegate:nilcancelButtonTitle:@"退出" otherButtonTitles:nil];

    [alert show];

    

}

 

#pragma mark----

#pragma mark Picker Data Source Methods


-(NSInteger) numberOfComponentsInPickerView:(UIPickerView *)pickerView

{

    return 2//设置picker的组件数

}

-(NSInteger) pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component   //返回各组件的rows数量

{

    if(component==raceComponent)

        return [self.race count];

    //如果是左侧组件,则返回数组race的数量;否则是soilder数组的数量

    return [self.soilder count];

}



#pragma mark Picker Delegate Methods


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

//返回默认组件的字符串

{

    if(component==raceComponent)

        return [self.race objectAtIndex:row];

    //如果组件是Race,则返回Race数组第row个组件字符串

    return [self.soilder objectAtIndex:row];

}


-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component    //选取某个组件的某行

{

    if(component==raceComponent)   //  如果组件号为0即左侧的

    {

        NSString *selectedRace=[self.race objectAtIndex:row];

                            //得到左侧组件选取的值

        NSArray *array=[allContent objectForKey:selectedRace];

                            //得到相应的二级数组

        self.soilder=array;  //将新的数组赋给自身的soilder数组

        [picker selectRow:0 inComponent:soilderComponent animated:YES];

                                //在右侧组件重置数组

        [picker reloadComponent:soilderComponent];

                                //picker重置组件2

    }

}


@end

  评论这张
 
阅读(58)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017