iOS开发——UI基础-控制器,IBAction和IBOutlet,UIView

ぃ、小莉子 提交于 2020-03-01 09:24:28

 

第一个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标识找出对应的控件(一般都是子控件)

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!