zoukankan      html  css  js  c++  java
  • iOS开发——UI基础-控制器,IBAction和IBOutlet,UIView

     

    第一个ios程序

     1 @interface ViewController : UIViewController
     2 
     3 @property(nonatomic, weak)IBOutlet UILabel *lable;
     4 
     5 @end
     6 
     7 
     8 
     9 @interface ViewController ()
    10 
    11 @end
    12 
    13 @implementation ViewController
    14 
    15 /**
    16  红色按钮
    17  */
    18 - (IBAction)redBtnClick
    19 {
    20 //    -[ViewController redBtnClick]
    21     NSLog(@"%s", __func__);
    22     // 拿到UILabel对象, 修改对象的属性, 让label对象变为红色
    23     self.lable.textColor = [UIColor redColor];
    24     self.lable.text = @"我是红色文字";
    25     self.lable.backgroundColor = [UIColor purpleColor];
    26     self.lable.font = [UIFont systemFontOfSize:30];
    27     self.lable.textAlignment = NSTextAlignmentCenter;
    28 }
    29 /**
    30  绿色按钮
    31  */
    32 - (IBAction)greenBtnClick
    33 {
    34     NSLog(@"%s", __func__);
    35     self.lable.textColor = [UIColor greenColor];
    36 }
    37 /**
    38  蓝色按钮
    39  */
    40 - (IBAction)blueBtnClick
    41 {
    42     NSLog(@"%s", __func__);
    43     self.lable.textColor = [UIColor blueColor];
    44 }
    45 @end

    一、控制器


      1.什么是控制器:

        任何继承于UIViewController的类,都称之为控制器

      2.控制器的作用:

        管理UI界面(负责管理UI界面的创建和一些事件的处理)

      3.注意点:

        UI界面是可以和它与之对应的控制器进行连线的,我们可以通过连线的方式,让UI界面上的元素和控制器中的代码产生一定的关系;默认情况下,UI界面中的元素是不能和方法进行关联的,要想关联UI界面中的元素必须将方法的返回值修改为IBAction。

    二、IBAction和IBOutlet


     

    • IBAction

        - (IBAction)redBtnClick;

       1. IBAction

         1.1 从返回值角度上看,作用相当于void

         1.2 只有返回值声明为IBAction的方法,才能跟storyboard中的控件进行连线

         1.3 IBAction只能加在方法上, 不能加在属性上

       2. IBAction几种连线方式

         从"控制器"往"Storyboard"连线

         从"Storyboard"往"控制器"连线

         直接在"Storyboard"中往"Storyboard"上的界面顶部连线

         直接在"Storyboard"中往"Storyboard"上的工具条连线

         不用先定义方法, 直接从"Storyboard"往"控制器"连线(常用)  

       3.IBAction连线的注意点:

         3.1 在Storyboard中拷贝元素的时候需要注意

           拷贝的同时会将以前的连线一起拷贝

           一个方法可以很多个控件关联

           一个控件可以和很多方法进行连线,在开发中, 一般情况下不会这样写

         3.2 如果将按钮关联的方法删除, 运行之后会报一个经典错误

             reason: '-[ViewController redBtnClick]: unrecognized selector sent to instance 0x7fb4aa618e50'

         3.3 IBAction只能作为方法的返回值

    • IBOutlet

      @property(nonatomic, weak)IBOutlet UILabel *lable;

      1. IBOutlet

        1.1 只有声明为IBOutlet的属性,才能跟storyboard中的控件进行连线

        1.2 属性要想能够连线必须在数据类型前面加上IBOutlet

      2. IBOutlet的几种连线方式

        从"控制器"往"Storyboard"连线

        从"Storyboard"往"控制器"连线

        直接在"Storyboard"中往"Storyboard"上的界面顶部连线

        直接在"Storyboard"中往"Storyboard"上的工具条连线

        不用先定义方法, 直接从"Storyboard"往"控制器"连线

      3. 注意点:

        一个控件可以关联多个属性

        一个属性不可以关联多个控件

        在进行属性连线的时候, Xcode会自动帮我们进行类型检测, 如果类型不匹配那么不能连线

        如果将属性和控件连线之后又将属性删除了, 那么只要程序运行就会报一个经典错误

           '[<ViewController 0x7fe9d9f1a5d0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key lable.'

        任何UI控件都可以和属性进行连线, 但是并不是任何控件都可以和方法连线. 只有继承于UIControl的控件才可以连线

    三、UIView


    + 什么是控件?

        - 屏幕上的所有UI元素都叫做控件,也有人叫做视图、组件

        - 按钮(UIButton)、文本(UILabel)都是控件

    + 控件的共同属性有哪些?

        - 尺寸

        - 位置

        - 背景色

        - ......

    + 苹果将控件的共同属性都抽取到父类UIView中

        - 所有的控件最终都继承自UIView

        - UIButton、UILabel都是继承自UIView(可以查看头文件)

    +  每一个控制器(UIViewController)内部都有个默认的UIView属性

        - @property(nonatomic,retain) UIView *view;

        - 控制器中管理的其他所有控件都是这个view的子控件(直接或者间接)

    + UIView常见属性和方法

     1 + @property(nonatomic,readonly) UIView *superview;
     2  //获得自己的父控件对象
     3 
     4 + @property(nonatomic,readonly,copy) NSArray *subviews;
     5  //获得自己的所有子控件对象
     6 
     7 + @property(nonatomic) NSInteger tag;
     8  //控件的ID(标识),父控件可以通过tag来找到对应的子控件
     9 
    10 + @property(nonatomic) CGAffineTransform transform;
    11 // 控件的形变属性(可以设置旋转角度、比例缩放、平移等属性)
    12 
    13 + @property(nonatomic) CGRect frame;
    14 // 控件矩形框在父控件中的位置和尺寸(以父控件的左上角为坐标原点)
    15 
    16 + @property(nonatomic) CGRect bounds;
    17  //控件矩形框的位置和尺寸(以自己左上角为坐标原点,所以bounds的x、y一般为0)
    18 
    19 + @property(nonatomic) CGPoint center;
    20 // 控件中点的位置(以父控件的左上角为坐标原点)
    21 
    22 
    23 
    24 
    25 - (void)addSubview:(UIView *)view;
    26  //添加一个子控件view
    27 
    28 - (void)removeFromSuperview;
    29  //从父控件中移除
    30 
    31 - (UIView *)viewWithTag:(NSInteger)tag;
    32  //根据一个tag标识找出对应的控件(一般都是子控件)
    将来的你会感谢今天如此努力的你! 版权声明:本文为博主原创文章,未经博主允许不得转载。
  • 相关阅读:
    3. CSS 的复合选择器
    2. CSS文本属性
    1. CSS字体属性
    pm2 语法
    Emmet语法
    排序算法之 '归并排序'
    CCS
    CCS
    CCS
    怀旧编程之原生js实现简易导航栏
  • 原文地址:https://www.cnblogs.com/chglog/p/4644331.html
Copyright © 2011-2022 走看看