iOS总结_UI层自我复习总结

news2024/11/20 18:24:17

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/495395.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot访问静态资源

SpringBoot项目中没有WebApp目录,只有src目录。在src/main/resources下面有static和templates两个文件夹。SpringBoot默认在static目录中存放静态资源,而templates中放动态页面。 static目录 SpringBoot通过/resources/static目录访问静态资源&#xff…

怎么衡量纸白银走势图的强弱?

目前国内银行提供的纸白银交易基本实现了全天候连续的交易时间,但由于银行所提供的交易终端的技术分析功能有限,投资者在分析行情时绑手绑脚,因此小编建议大家可以尝试使用国际上主流的MT4的平台,作为观察国际银价走势的参考和技术…

在 Python 中获取昨天的日期

文章目录 在 Python 中获取昨天的日期Python 中的Date模块 在 Python 中获取昨天日期的示例 我们将通过多个示例介绍如何使用 Python 获取昨天的日期。 在 Python 中获取昨天的日期 Python 是一种高级语言,可用于数据科学和机器学习,以使用 Python 的数…

unity进阶学习笔记:消息框架

1 使用消息框架的目的 对于小型游戏,可能不需要任何框架,而是让各个游戏脚本直接相互通信。如要实现玩家受到攻击血量减少,通过玩家控制类向血条脚本发送消息减少血量。但是这样直接通信会导致各脚本通信关系记为复杂,并且每一个…

测试5年从中兴 15K 跳槽去腾讯 32K+16,啃完这份笔记你也可以

粉丝小王转行做测试已经是第5个年头,一直是一个不温不火的小职员,本本分分做着自己的事情,觉得自己的工作已经遇到了瓶颈,一个偶然的机会,获得了一份软件测试全栈知识点学习笔记,通过几个月的学习&#xff…

基于AT89C51单片机的计算器设计与仿真

点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/87759134?spm=1001.2014.3001.5503 源码获取 主要内容: 本次设计所提出的一种基于单片机技术的简易计算器的方案,能更好的解决计算机计算的问题,随着数字生活的到来,单片…

什么是皮安计?皮安表测试测量软件分享NS-SourceMeter

什么是皮安计 测量低直流电流,其需求常常远远超出数字万用表的功能。一般来说,数字万用表缺少测量低于100nA的电流所需的灵敏度。即使在较高的电流水平上,一个DMM的输入电压降(电压负担)高达几百毫伏,也不…

记录线上排查内存泄露问题

背景 记录一次云上排查内存泄露的问题,最近监控告警云上有空指针异常报出,于是找到运维查日志定位到具体是哪一行代码抛出的空指针异常, 问题分析 发现是在解析cookie的一个方法内,调用HttpServletRequest.getServerName()获取…

嵌入式软考备考_5 安全性基础知识

安全性基础知识 网安问题概述 被动攻击:监听(截获)。 主动攻击:主动破坏(中断篡改,病毒,ddos使得某个服务拒绝服务,重放攻击:黑客截取了正常用户输入用户名密码的加密…

Spark SQL

一、理解介绍 Spark SQL是spark中用于结构化数据处理的组件,可访问多种数据源,如连接Hive、MySQL,实现读写等操作。为什么要用spark去操作这些数据库呢?hive是一个基于Hadoop的数据仓库工具,hive的查询操作语句都要依…

走进两邻文化,全民禁种铲毒——禁毒公益大集活动

四月梧桐芳菲尽,五月槐花飘香来。五月的春风赋予了劳动者应有的权利和由衷的自豪感;五月的春雨浇灌了我们肩负禁毒工作的义务和责任的使命感。现在也是今年禁种铲毒工作的深入执行阶段,禁毒工作一直以来都是维护社会稳定的重要工作之一&#…

C语言函数大全-- s 开头的函数(4)

C语言函数大全 本篇介绍C语言函数大全-- s 开头的函数(4) 1. strdup 1.1 函数说明 函数声明函数功能char * strdup(const char *s);用于将一个以 NULL 结尾的字符串复制到新分配的内存空间中 注意: strdup() 函数返回指向新分配的内存空间…

EasyMedia播放rtsp视频流(vue2、vue3皆可用)

之前发布过WebRtc播放rtsp视频流的博客,已经解决了web播放rtsp的问题,但WebRtc太耗内存,且需要命令行启动,对用户不太友好,虽然可以写脚本,让用户一键启动。这是无意间发现的另一种web播放rtsp视频流的办法…

相当Python程序员,选择培训班还是自学?我结合自己的经历谈谈看法

前几天我写了一篇文章,分享了自己当上程序员的经历。然后,我收到了很多小伙伴的提问,都在问同一个问题,即如何选择报培训班还是自学。今天,我结合自己的个人经历,来谈一下个人的看法。 我认为这个问题的第…

C/C++内存管理以及new/delete的底层实现。

一、C/C 内存分布 我们平常写代码所用的内存叫虚拟内存,是操作系统分配给每个进程的4G的内存,其中3G叫用户空间,1G叫内核空间。 我们所用的也就是3G的用户空间,如下图: 说明: 1. 代码段—可执行的代码/只…

【Linux】Linux学习之常用命令一

介绍 这里是小编成长之路的历程,也是小编的学习之路。希望和各位大佬们一起成长! 以下为小编最喜欢的两句话: 要有最朴素的生活和最遥远的梦想,即使明天天寒地冻,山高水远,路远马亡。 一个人为什么要努力&a…

【嵌入式笔/面试】嵌入式软件基础题和真题总结——单片机与Linux

在学习的时候找到几个十分好的工程和个人博客,先码一下,内容都摘自其中,有些重难点做了补充! 才鲸 / 嵌入式软件笔试题汇总 嵌入式与Linux那些事 阿秀的学习笔记 小林coding 百问网linux 嵌入式软件面试合集 2022年春招实习十四面…

在离职1年后,我后悔了,决定再战阿里,涨薪50%,成为卷王

2021年初,我通过一整天的笔试及面试加入一家(某一线城市国资委全资控股)某集团的研究机构(中央研究院),任职中级软件测试工程师;在这边工作了整整一年,目前已经跳槽到一家互联网公司…

Linux之系统j基本设置(四)

1、Linux 系统基本设置 1、系统时间管理 查看系统当前时间和时区 [root192 ~]# date 2023年 05月 04日 星期四 22:43:16 EDT [root192 ~]# date -R Thu, 04 May 2023 22:43:24 -0400 [root192 ~]# date %Y %m %d %H:%M:%S 2023 05 04 22:43:38设置完整时间 [root192 ~]# da…

智能安防系统-视频监控系统

一、智能安防系统 1、智能安防系统介绍 安全防范系统成为了智慧城市与物联网行业应用中的一个非常重要的子系统。 安防系统主要包括:视频监控系统、入侵报警系统、出入口控制系统、电子巡查系统以及智能停车场管理系统等5个子系统。 AI人工智能安防系统功能&#xf…