10-UIKit(UIDatePicker、UIPickerView、UIWebView、Storyboard)

目录:

1. UIDatePicker

2. UIPickerView

3. UIPickerView多列关联

4. UIWebView

5. Storyboard(故事板)

回到顶部

1. UIDatePicker

     1.1 获取用户选择的日期:

           NSDate *date = [UIDatePicker date];

     1.2 需要设置的属性:

           Mode: 时间, 日期, 日期和时间…

           Locale: 设置地区,比如中文等

           Date: 初始日期,一般为当前日期

 1     NSDate *selectedDate = [self.datePicke date];
 2 
 3     //将世界标准时间 转换为 本地时间
 4 
 5     //创建时间格式对象
 6 
 7     NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];
 8 
 9     //设置时间格式
10 
11     dateFormatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";
12 
13     //调用stringFromDate方法将当前时间(或用户选择的时间)转换为本地时间
14 
15     NSString* str = [dateFormatter stringFromDate:selectedDate];
16 
17     self.dateLabel.text = [NSString stringWithFormat:@"%@",str];

 

 

回到顶部

2. UIPickerView

     2.1 功能:

           让用户在列表中选择一条数据

     2.2 数据来源:

           UIPickerViewDatasource, UIPickerViewDelegate

           需要设置数据源和委托,回答问题

           多少列(Component), 每列多少行(Row)

           每行的内容:

                可以是NSString字符串

                也可以是NSAttributeString属性字符串

                更可以是UIView的视图对象

     2.3 选择后的响应方法

 

 1 // 有多少列
 2 
 3 -(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{
 4 
 5     return 1;
 6 
 7 }
 8 
 9 // 每一列有多少行
10 
11 -(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
12 
13     return self.areas.count;
14 
15 }
16 
17 // 每一行的内容,这个方法是在代理中
18 
19 -(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{
20 
21     return self.areas[row];
22 
23 }
24 
25 // 获取选择了哪一个
26 
27 -(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{
28 
29     self.label.text = self.areas[row];
30 
31 }

 

回到顶部

3. UIPickerView多列关联

     3.1 关联的关键是将数据模型关联起来

           areas: NSDictionary:  (key :NSString, value:NSArray)

           cites: NSArray (keys)

           regions : NSArray (valueForKey)

     3.2 当选择城市时,调用方法,方法中将regions中的数据换掉,然后刷新界面:

           pickerView reloadComponent:

     3.2 代码方式选择某一行:

           pickerView selectRow:inComponent:animated:

 

 1 -(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{
 2 
 3     if (component == 0) {
 4 
 5         self.regions = [self.areas valueForKey:self.cities[row]];
 6 
 7         [pickerView reloadComponent:1];
 8 
 9         [pickerView selectRow:0 inComponent:1 animated:YES];
10 
11     }
12 
13 }

 

回到顶部

4. UIWebView

     4.1 属性:

           Scaling Page to Fit 选中

     4.2 加载网页:

           NSURL  :   http://www.apple.com.cn

           NSURLRequest

           webView loadRequest:

1 - (IBAction)goWeb:(UITextField *)sender {
2 
3     NSURL *url = [NSURL URLWithString:sender.text];
4 
5     NSURLRequest *request = [NSURLRequest requestWithURL:url];
6 
7     [self.webView loadRequest:request];
8 
9 }

回到顶部

5. Storyboard(故事板)

     5.1 是什么

           是一堆nib文件,放到一个文件中

     5.2 干什么

           管理所有的界面相关的信息以及界面与界面之间的跳转

     5.3 基本概念

           自iOS5开始, Xcode5中创建项目默认使用Storyboard

           替代nib文件(95%)

 

                Storyboard             xib

                Scene(场景)            一个xib文件

                initWithCoder:        initWithNibName:bundle:

 

     5.4 好处

           减少代码量

           直观,清晰

           所有的View集中到一起

           不需要代码指定rootViewController, 由Storyboard自动完成

 

     5.5 VC-Modal跳转

           1)拖拽一个VC(黄球)

           2)在旧场景中的按钮上拉线到新场景,创建Segua,选择Modal模式

                可以选择建好的Segua, 设置其属性:

                      Identifier  : 标识符,用于区别多个Segua

                      Style  :   可选择跳转的模式(Modal或push)

                      Transition: 选择跳转的动画

           3)新界面-VC

                如果新界面不需要写代码, 那也就不需要创建新的类与新场景绑定

                如果新界面中需要写代码控制,那就需要创建新类:

                      1)创建一个继承自UIViewController的类

                                注意不要选择with xib for user interface

                      2)点击新场景,设置类绑定

                      3) 其他和以前一样,如设置返回按钮:

           4) 界面返回:

                      千万不要用连线的方式返回

                      连接一个方法,dismiss…

     5.6 VC-push

           1) 需要Navigation包含:

                 选择需要包含的场景

                Editor-->Embed In --> Navigation Controller

           2)  从旧场景中的按钮上拉线到新场景,创建segua, 选择push模式

                相当于从NavigationController中push了一个新场景

    

     5.7 Navigation和Modal一起使用

           从一个Navigation跳转到另一个Navigation,应该使用Modal模式

    

     5.8 正向传值

           1) 做为跳转连线(创建Segue)

           2) 接收参数的VC(Segue的目的地):

                1>  拖拽显示控件到界面,增加属性

                2>  重写viewWillAppear,根据数据刷新显示

                3>  定义公开属性用来接收传入的参数

           3)  设置Segue 的标准符:

                在Storyboard中找到Segue, 打开检查器4, 设置Identifier属性,起个名字

           4)重写 prepareForSegue 方法,进行传值

                1>打开源VC代码

                2>重写prepareForSegue

                3>使用segue.identifier属性区分哪个Segua

                4> 使用segue.destinationViewController属性获取目标VC

                5> 给目标VC中的属性赋值,达到传参的目的。

           5) 如果目标VC被包含在一个Navigation中,则拿到的目标VC是navi,此时需要如下操作才可得到真正的目标VC:

 1 // 在segue跳转前自动调用此方法,只要segue跳转都会调用此方法,正向传值
 2 
 3 -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
 4 
 5     if ([segue.identifier isEqualToString:@"GoCViewController"]) {
 6 
 7         NSString *parameter = @"我是参数";
 8 
 9         // 目的地VC
10 
11         MXCViewController *destination = segue.destinationViewController;
12 
13         destination.data = parameter;//传参
14 
15     }
16 
17     if ([segue.identifier isEqualToString:@"GoNaviViewController"]) {
18 
19         NSString *parameter = @"000";
20 
21         UINavigationController *navi = segue.destinationViewController;
22 
23         MXBViewController *destination = (MXBViewController *)navi.topViewController;
24 
25         destination.data = parameter;
26 
27     }
28 
29 }

     5.9  Navigation配置

           1) title

                直接点击场景上的NavigationBar, 编辑

           2) navigation item (左右按钮)

                一个按钮直接拖拽

                多个按钮:

                      只能用代码,跟以前一样

           3)toolbar

                1>设置显示

                      选择NavigationController

                      检查器4  选中 Show ToolBar

                2>给被包含的VC加按钮

                      拖拽

                3>不同的VC可以配置不同的Toolbar

                      如果没有配置VC的toolbar时,不希望push时显示出来:

                           选中VC,检查器4:  Hide Bottom Bar On Push

           4)自定义头视图

                直接拖拽一些控件到NavigationBar上使用

                或者拖拽一个UIView做为头视图,UIView中可以随便布局子视图

          

           以前的xib方式下,用代码写:

                self.navigationItem.titleView = …..;

                self.navigationItem.leftBarButtonItem  = [[UIBarButtonItem alloc]initWithCustomView:UIView];

 

     5.10 TabBarController

           1)第一方式

                拖拽一个Tabbar黄球

                删除不需要的子场景

                接线从TabBarController到你要的场景中,注意要选择view controllers

           2) 第二方式

                选择需要包含的VC

                Editor-->Embed In --> Tab Bar Controller

           3) 配置

                title, image

                点击具体的VC下的TabBar, 修改Title, 检查器4中选择image

 

     5.11 和旧的xib代码兼容

           在Storyboard中跳转到xib文件:

                连线IBAction, 调用方法,方法中和以前一样:

                           创建VC对象(initWithNibName:bundle:), 然后present或push

           在Storyboard中不使用Segue来进行代码跳转到其他场景:

           在要跳转的那个VC中设置一个属性storyboard ID(第三个检查器),然后使用present进行跳转

       UIViewController *viewController = [self.storyboard instantiateViewControllerWithIdentifier:@"MyScene"];

       [self presentViewController:viewController animated:YES completion:nil];

 

补充:

arc4random() % 5  随机产生0~4其中一个

 

posted @ 2014-01-19 20:15  回读(IOS)  阅读(938)  评论(0编辑  收藏  举报