zoukankan      html  css  js  c++  java
  • 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其中一个

     

  • 相关阅读:
    IE与FF有关javascript差异的点点滴滴 F
    document.documentElement与document.body F
    CSS模块化开发 F
    关于使用“JS获取屏幕,浏览器,网页高度宽度”的个人思考 F
    GUI F
    关于mousemove和scroll事件的一点技巧 F
    博客换肤 F
    一个日历的简单实现 F
    忠烈杨家将观后感 F
    Vim的配置
  • 原文地址:https://www.cnblogs.com/yangmx/p/3526162.html
Copyright © 2011-2022 走看看