iOS总结_UI层自我复习总结

这篇文章详细介绍了UIApplicationMain函数在iOS应用启动过程中的作用,包括创建应用程序对象和代理,以及启动事件循环。接着讨论了如何使用UIViewController搭建界面,特别是它的viewDidLoad方法。此外,文中还讲解了UIView及其重要子类如UILabel、UIButton的基本属性和用法,以及一些基础的界面元素如UITextField和键盘的交互。最后提到了一些常见的UI控件,如UIStepper、UISlider和UISwitch。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

UI层复习笔记

在main文件中,UIApplicationMain函数一共做了三件事

  • 根据第三个参数创建了一个应用程序对象

    • 默认写nil,即创建的是UIApplication类型的对象,此对象看成是整个应用程序的一个抽象,负责存储应用程序的状态。
  • 根据第四个参数创建了一个应用程序代理类对象
    • 所谓代理,及帮助另一个对象做事情。上面第一步中创建的应用程序对象只负责存储应用程序的状态,但不提供响应,而是给代理发消息,由代理负责针对不同的状态提供响应。比如说:程序一启动,代理就要响应一下,说明弹出的第一个界面是谁。
    • 其中,就是传入一个类的类名字符串即可,此代理类对象一定是系统创建的,而且只有一个,也就是单利。其中AppDelegate class返回的是这个类的类型描述信息,在使用NSStrinFromClass这个函数,从类型信息中把类名以名字符串形式返回。
  • 第三件事,启动了事件循环
    • 一个背后运行的死循环,用于不停地检测屏幕上的触点事件,一检测到触摸事件,立即将此事件传给用用程序,让程序提供相应

如何搭建一个界面? - UIViewController

  • 作用:

    • 负责创建界面
    • 负责提供界面与用户的交互响应
  • 特点:
    • 天生自带一个视图属性,所有界面设计就是添加到这个视图即可。
  • 规范写法:
    • step1:创建一个类,继承自UIViewController
    • step2:在类中的viewDidLoad方法方法中,编写构建界面的代码
    • step3:在启动方法中,只需要将这个自定义的类创建出实例,作为window的根视图控制器即可
  • viewDidLoad方法的特点:
    • 此方法是控制器的那个view生命周期的起始点,即创建完view实例之后,第一个执行的方法,并且此方法只会调用一次
    • 除此方法外,view还会存在其他状态,如:viewWillAppear、viewDidAppear、viewWillDisappear、viewDidDisappear,这些方法会随着view的显示或隐藏而执行多次,但只要控制器没有销毁,view没有销毁过,则viewDidLoad方法只会调用一次

界面元素的基础 - UIView

  • 是什么?所有界面上看的见的东西都是UIView的子类,系统定义的一个通用的描述界面上某个可显示的矩形区域,一个重要的特性就是具备容器性,即UIView可以内部添加其它的UIView,除此以外它还能提供触点的响应。
  • 核心属性:
    • frame(框架,边框):用于描述这个视图在父视图中的位置及占据的区域大小

      1. CGRect结构提类型

        • 包含origin属性和size属性
        • origin:CGPoint类型的结构体
        • size:CGSize类型的结构体
        • CGRect包含四个浮点,两个存储x和y用于定位,两个存储width和height用于描述大小
    • 如何构建一个CGRect类型的结构体变量呢?
      • 使用一组函数即可,函数名规律是是:结构体类型名 + Make

        CGRect -> CGRectMake(x,y,w,h);

        CGPoint -> CGPointMake(x,y);

        CGSize -> CGSizeMake(w,h);

        UIEdgeInset -> UIEdgeInsetMake();

        特殊:UIRange -> UIMakeRange()

  • 有哪些子类?
    • UIWindow、UILabel都是UIView的直接子类,有一个特殊的分支叫UIControl,特殊之处在于有自己的高级事件,也管这个分支叫控件,UIButton、UITextField都是控件,但UILabel不是空间,虽然口头交流时经常误把很多不是空间的视图也称之为控件,但概念要清楚,只有UIControl的子类才能叫做控件。

UIView的几个子类:

  • UILabel 标签

    • 作用:显示文字
    • 核心属性:

      text: 类型NSString

      numberOflines:显示的行数,默认是1,如果设置为0,则代表行数无上限

      font:字体,字号

      textColor:文字颜色

      backgroundColor:背景色

      textAlignment:水平方向文本的对齐方式

  • UIButton 按钮
    • 作用:以文字或图片的样式提供给用户一个可点击并相应的区域
    • 核心属性:默认图文左右排
      1. 文字title:setTitle: forState:
      2. 图片image:setImage: forState 对于后缀是.png的图片省略后缀,其他的图片类型就需要加后缀名。
      3. 背景图backgroundImage: setBackgroundImage: forState
      4. 按钮有四个状态:normal(摆在那不动)、highlight(高亮状态,按下去不松手)、selected(选中状态,通过设置按钮的selected属性为YES才会进入到这个状态)、disable状态(不能用状态,通过设置按钮的enable属性为NO时进入此状态)
    • 创建事项:
      • 使用工厂方法创建按钮式,可以通过参数指定是系统版还是自定义版
      • 使用new或alloc init 方式创建的按钮,等价于传自定义版参数
      • 如何选择使用系统版,还是自定义版按钮呢?
      • 因为系统自带高亮,所有美工给一套图时,就选系统版
      • 如果美工给了两套图,就选择则自定义版
      • 自定义扮,title的文字颜色为白色,系统板时有默认颜色,title为蓝色
    • 核心事件:
      • 事件种类:touchUpInside
      • 如何添加对事件的响应:addTarget: action: forControlEvent
  • UITextField
    • 作用:接受输入
    • 核心属性:

      text属性:NSString类型。可读可写,读取就是获取输入的文字,给属性赋值,则文字会显示到文本框中

      键盘属性

      设置边框样式:borderStyle

      设置键盘样式:keyboardType

      设置键盘右下角按键的样式:returnType

      设置键盘整体色系风格:keyboardAppearance

      设置键盘是否是密码框:secureTextEnter

    • 核心事件:

插播知识点

[xxx copy]将长度可变的的复制成长度不可变的

[xxx mutableCopy]将长度不可变的复制成长度可变的

NSArray --> [NSArray NSmutableCopy] -->NSmutableArray

问题

字符串类型的属性是用什么修饰?

答案:使用copy修饰,因为有一种特殊情况,就是一旦将MutableString赋值给属性,一旦有其他的引用也指向这个可变字符串,就会有修改其内容的可能。这样的话,就会导致明明声明的是不可变长度的属性,会发生内容的改变。一旦用了copy修饰,则就算赋值一个可变长度的内容,也会先执行一次copy,将其拷贝成一份长度不可变的副本,让属性只想这个副本,就算有其他引用修改那个长度可变的字符串,也不会影响副本的内容。



  • 文本框

    • 键盘为什么弹起来?

      • 当有触点在文本框时,系统对这个触摸动作进行了响应,相应的结果就是让文本框成为第一响应者
      • [textField becomeFirstResponder 成为第一响应者 ,调用键盘
    • 如何收键盘?
      • 取消掉文本框的第一响应者身份即可
      • [textField resignFirstResponder]
    • 什么时候收键盘?
      • 情况一:点击屏幕的空白处:点击控制器的那个view

        • 实现控制器的 touchesBegan:方法即可
      • 如果有多个键盘:如果界面中有多个文本框,那么可以通过结束他们父视图的编辑状态方法
        • 批量关闭所有文本框弹起的键盘:[self.view endEditing:YES];
      • 情况二: 点击键盘右下角return按键
        • - (BOOL)textFieldShouldReturn:(UITextField *)textField
        • 右下角按键类型:returnKeyType
    • 密码框:secure
    • 提示性:placeHolder
  • 代理

    • 遵守协议
    • 实现协议中的方法
    • 设置委托方的代理人为当前对象
    • 代理方法的第一个参数,是委托方本身。
  • 懒加载

    • 也叫延迟加载,等到需要使用时才开辟空间创建对象
  • 消息框UIAlertContent

    • 作用:弹出提示,有两种样式,屏幕中间,屏幕底部
    • 如何解决样式?创建实例的时候,通过style参数,alert样式在屏幕中间,actionsheet在屏幕底部
    • addTextFieldWithConfigurationHandler:参数是 block ,在block中可以设置 alert帮我们创建 文本框
    • 数组中的 文本框 是 第四步 添加进来的文本框

      UITextField *usernameField = alert.textFields[0];

      UITextField *passwordField = alert.textFields[1];
  • 使用xib技术实现界面

    • 理念:将控制器中原本需要些大量代码进行构建界面的过程,通过一个后缀是xib的文件简化此操作。当再去创建控制器实例时,系统会通过读取xib文件,完成界面的创建。针对系统创建的这个视图,需要在控制器中访问时,可以通过连线的方式完成关联。
    • IBOutlet关键字:将控制器中的属性与界面中系统创建的某个视图关联在一起
    • IBAction关键字:键控制器中的方法与界面中系统创建的某个视图的时间关联在一起
  • 切换VC

    • A -> B:使用的是A控制器的presentViewController方法
    • B -> A:使用的是B控制器的dismissViewController方法
    • 注意A和B的声明周期:A推出B时,虽然看不见A了,但是A没有被摧毁,从B返回A时,B会被销毁,A从隐藏状态编程显示状态
  • 使用xib简化创建界面的过程

    • 如何实现
    • 借助于系统的Interface Builder 完成,IB以前是一款独立的软件,现在整合到xcode中, 只需要创建自定义的控制器时,勾选下面的“Also Creat Xib file”选项,则自动生成与控制器名相同,后缀为xib的文件,xib以前叫做叫nib
  • UIStepper 步进控件

    • 作用:记录一个浮点值,并且控件提供了两个按键界面,由用户精确地控制记录支个值得递增或递减
    • 核心属性:value
    • 核心事件:valueChanged
  • UISlider 滑块控件

    • 作用:记录一个浮点值,通过一个可以滑动的按键,快速在某个范围内得到一个不容易精确控制的数值
    • 核心属性:value
    • 核心事件:valueChanged
  • UISwitch 开关控件

    • 作用:记录一个布尔值,通过点击的方式,可以记录用户是否的选择
    • 核心属性:on(BOOL类型)
    • 核心事件:valueChanged
  • SegmentedControl 分段控件

    • 核心属性:selectedSegmentIndex
    • 核心事件:valueChanged
  • Activity Indicator 菊花控件

    • 核心属性:isAnimating
    • 核心方法:startAnimating stopAnimating
  • Progress 进度提示条

    • 核心属性:progress (0 ~ 1 浮点)

注意:浮点型和整形相比,永远也到不了1。浮点型精确到小数点后6位

  • NSTimer定时器

    • 作用:可以设置某方法,每个一段时间,自动执行
    • 如何创建并启动?
      • timerXXXXX : 创建好的定时器,不会自动启动,我们只有把该定时器添加到事件循环中
      • scheduleXXXX: 创建好定时器后,自动启动
  • DatePicker

    • 核心属性:date
    • 核心方法:日期格式化 HH - mm - ss yyyy - MM - dd
       

  • PickView

    • 我们关注三问一答

      • 三问:(DataSource)

        1. 有多少列
        2. 每列有多少行
        3. 每行长什么样子
      • 一答:(delegate)
        1. 选中某行如何处理
  • UINavigationController导航控制器

    • 作用:为了管理多个控制器
    • 配置导航类(NavigationBar)
      • 高度:算上状态栏64个点(状态栏20个点)
      • 内容:通过navigationItem
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lmr廖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值