ios开发入门

开发一个应用程序看起来复杂,实际上我们可以分为以下几个方面来看:

  • 设计用户界面
  • 定义交互
  • 实现行为
  • 整合数据

我们这里需要先提一种典型的软件设计典范,也就是我们常说的MVC模式。((业务模型)Model-(用户界面)View-(页面业务逻辑)Controller)

目的:将M和V实现代码分离,从而使同一个程序可以用不同的表示形式。

1. 设计用户界面

视图层次:

视图层次定义了视图相对于其他视图的布局。视图层次顶部的是窗口对象(用UIWindow类的实例表示),它作为基本的容器,将在屏幕上显示的视图对象添加到其中。

使用视图构建界面:

使用UIKit视图可以快速组装一个基本界面。其常见类型有以下几种:
在这里插入图片描述

使用串联图来布局视图:

串联图由场景组成,每个场景有关联的视图层次。通过将视图拖出对象 库并将其放在串联图场景中,可以自动将它添加到该场景的视图层次。视图在该层次中的位置由您放置 的位置决定。将视图添加到场景后,您可以在画布上对其进行大小调整、操控、配置和移动操作。

使用检查器来配置视图:

每个检查器都提供了配置界面中元素的重要选项。选择串联图中的对象(例如视图)后,可以使用各个检查器来自定义该对象的不同属性。
在这里插入图片描述

  • File:让您指定串联图的常规信息。
  • Quick Help:提供有关对象的实用文稿。 Identity。让您指定对象的自定类并定义其辅助功能属性。
  • Attributes:让您自定对象的可视化属性。
  • Size:让您指定对象的大小以及 Auto Layout 属性。
  • Connections:让您创建界面和源代码之间的连接。

PS:关于视图对象与代码的绑定我们一般使用(Ctrl+选中空间拖动到类的相应位置创建绑定)。

使用Auto Layout来定位视图:

Auto Layout 是一 种用来表示应用程序的用户界面中各种视图之间关系的体系。它可让您基于单个视图或视图组之间的约束来定义这些关系。
Auto Layout 菜单位于画布的右下角,有四个部分。您可以使用该菜单来各种类型的约束添加到画布上 的视图中,解决布局问题以及确定约束调整大小行为。

2. 定义交互

对用户界面进行布局后,接下来就需要让用户与界面进行交互。这时就要使用控制器了。控制器能响应用户操作并使用内容填充视图,从而支持您的视图。控制器对象是一个管道,通过它,视图能了解数据模型的修改,反之亦然。应用程序的控制器会通知视图有关模型数据中的修改,之后控制器会将用户发起的修改(例如,在文本栏中输入的文本)传达到模型对象。不论模型对象是响应用户操作,还是定义浏览,控制器都会实现应用程序的行为。

视图控制器

构建了基本的视图层次后,下一步就需要控制可视元素并响应用户输入。在 iOS 应用程序中,可以使用视图控制器(UIViewController)来管理内容视图及其分视图层次。
在这里插入图片描述
视图控制器并不是视图层次的一部分,也不是界面中的元素。相反,它管理着层次中的视图对象,并为它们提供行为。在串联图中构建的每个内容视图层次,都需要一个对应的视图控制器来管理界面元素, 并执行任务来响应用户的交互操作。通常,这意味着需要为每个内容视图层次编写一个自定 UIViewController子类。如果应用程序有多个内容视图,那么就需要为每个内容视图使用不同的自定视图控制器类。
视图控制器扮演着多种角色。它们负责协调应用程序的数据模型与显示该数据的视图之间的信息传输管理应用程序的内容视图的生命周期,并处理设备旋转时方向的更改。但其最主要的作用可能是响应用户输入
您还可以使用视图控制器来转换各种类型的内容。由于 iOS 应用程序显示内容的空间很有限,因此视图控制器提供了所需要的基础结构,可让您移除一个视图控制器的视图,替换为另一个视图控制器中的视图。
通过让视图控制器文件与串联图中的视图进行通信,可以定义应用程序中的交互方式。方法是通过 Action 与 Outlet 来定义串联图与源代码文件之间的连接。

操作(Action)

操作是一段代码,它与应用程序中可能会发生的某类事件相链接。该事件发生后,代码就会执行。可以定义操作来完成任何事情:从操控数据到更新用户界面。操作可驱动应用程序的流程来响应用户事件或者系统事件。
可采用如下方法来定义:使用 IBAction 返回类型和 sender 参数来创建并实现方法。

- (IBAction)restoreDefaults:(id)sender;

sender 参数指向负责触发操作的对象。IBAction 返回类型是个特殊的关键词。它与 void 关键词类似,但它表示该方法是一种操作。

Outlet:

Outlet可让您从源代码文件引用界面中的对象(添加到串联图的对象)。您可以按住 Control 键,并将串联图中的特定对象拖移至视图控制器文件来创建Outlet。这就为视图控制器文件中的对象创建了属性,通过该属性,您可以在运行时通过代码来访问并操控该对象。
Outlet 被定义为 IBOutlet 属性。

@property (weak, nonatomic) IBOutlet UITextField *textField;
控制(Control):

控制是用户界面对象(例如按钮、滑块或者开关),用户可以操控它们来与内容进行交互、提供输入、在应用程序内导航,以及执行所定义的其他操作。代码可通过控制来接收用户界面的消息。

用户与控制进行交互,会创建控制事件。控制事件表示用户可在控制上使用的各种手势,例如将手指抬离控制、手指拖移到控制上,以及在文本栏中按下。

常见的事件类型有三种:

  • 触碰和拖移事件。用户通过触碰或者拖移与控制交互时,发生的就是触碰和拖移事件。触碰事件分几个阶段。例如,当用户初次用手指触碰按钮,就会触发 Touch Down Inside 事件;如果用户手指拖离按钮,则会触发相应的拖移事件。当用户的手指抬离按钮但仍停留按钮边缘的范围内,就会发送 Touch Up Inside。如果用户在抬起手指前,手指已经拖离了按钮(实际上是取消了触碰),就会触发 Touch Up Outside 事件。
  • 编辑事件。用户编辑文本栏,发生的是编辑事件。
  • 值更改事件。用户对控制进行操控,从而导致控制产生一系列不同的值,发生的是值更改事件。
导航控制器:

如果应用程序有多个内容视图层次,就需要能够在它们之间进行切换。为此,可以使用专门的视图控制器:导航控制器 (UINavigationController)。导航控制器管理在一系列视图控制器中向后和向前切换 的操作,例如用户在 iOS 版“邮件”应用程序的电子邮件帐户、收件箱邮件和单封电子邮件之间导航。

我们将由特定导航控制器所管理的一组视图控制器称为其导航栈。导航栈是一组后进先出的自定视图控制器对象。添加到堆栈的第一个项目将变成根视图控制器,永不会从堆栈中弹出。而其他视图控制器可被压入或弹出导航栈。
虽然导航控制器的最主要作用是管理内容视图控制器的显示方式,但它还负责显示自己的自定视图。具 体来说,它会显示导航栏(位于屏幕顶部的视图,提供有关用户在导航层次中位置的上下文)。导航栏包含一个返回按钮和其他可以自定的按钮。添加到导航栈的每个视图控制器都会显示这个导航栏。

使用串联图来定义导航:

串联图是由一系列的场景组成,每个场景表示一个视图控制器及其视图层次。场景则由过渡连接。过渡表示两个视图控制器之间的切换:源视图控制器和目的视图控制器。

有以下几种过渡

  • Push:Push过渡将目的视图控制器添加到导航栈。只有当源视图控制器与导航控制器连接时,才可以使用Push过渡。

  • Modal:Modal过渡就是一个视图控制器以模态方式显示另一个控制器,需要用户在显示的控制器上执行某种操作,然后返回到应用程序的主流程。Modal视图控制器不会添加到导航栈; 相反,它通常被认为是所显示的视图控制器的子视图控制器。显示的视图控制器的作用是关闭它所 创建和显示的 Modal 视图控制器。

  • Custom:可以通过将UIStoryboardSegue子类化来定义自定过渡。

  • Unwind:Unwind过渡通过向后移动一个或多个过渡,让用户返回到视图控制器的当前实例。使用Unwind过渡可以实现反向导航。

除了过渡之外,还可以通过关系来连接场景。例如,导航控制器与其根视图控制器之间就存在关系。就此而言,这种关系表示导航控制器包含根视图控制器。

使用串联图规划应用程序的用户界面时,要确定将其中一个视图控制器标记为初始视图控制器,这一点尤为重要。运行时,该视图控制器的内容视图会在应用程序首次启动时显示,且在需要时,您可以从该视图控制器切换到其他视图控制器的内容视图。

3. 整合数据

应用程序的数据模型由数据结构和(可选)自定业务逻辑组成;自定业务逻辑是让数据保持一致状态所必要的。在设计数据模型时,不应完全忽略应用程序的用户界面。但是,您肯定会想单独实现数据模型对象,而不依赖于特定的视图或视图控制器是否存在。保持数据与用户界面分开,有助于通用应用程序 (可在 iPad 和 iPhone 双平台上运行的应用程序)的实现,也让代码复用变得更容易。

模型设计:

如果需要储存的数据很小,那么Foundation 框架类是最佳选择。例如,如果应用程序只需要跟踪字符串列表,则可以依赖 NSArray 和 NSString 来替您操作。

如果数据模型不仅要储存数据,还要求自定业务逻辑,那么可以编写一个自定类。应考虑如何将现有框架类合并到自己的类的实现中。在自定类中使用现有框架类,往往比重写更省时省力。例如,自定类可能使用NSMutableArray来储存信息,但是会定义其自己的功能来处理该信息。

4. 使用设计模式

  • MVC
  • 目标-操作
  • 委托
    • 委托是一种简单而强大的模式。在此模式中,应用程序中的一个对象代表另一个对象,或与另一个对象协调工作。授权对象保留对另一个对象(委托对象)的引用,并适时向委托对象发送信息。该信息会告诉事件的委托对象,授权对象即将处理或刚处理了某个事件。委托对象可能会对该信息作出如下响应: 更新其本身或应用程序中其他对象的外观或状态,在某些情况下,它会返回一个值来反映待处理的事件该如何处理。

    • 委托模式不仅普遍用于既有的框架类,而且也可应用在应用程序的两个自定对象之间。常见的设计是将 委托作为一种手段,允许子视图控制器将某些值(通常为用户输入的值)传达到父视图控制器。

5. 处理Foundation

值对象:
字符串(NSString):

NSString类为字符串提供了一个对象包装器,它具有诸多优势,如内置了可用于储存任意长度字符串的内存管理、提供了对各种字符编码(特别是Unicode)的支持,以及用于格式化字符串的实用工具等。 因为您通常会使用此类字符串,所以Objective-C提供了速写记法,即根据常量值来创建 NSString对象。要使用此NSString字面常量,只需在双引号字符串前面添加 (@) 符号。

// Create the string "My String" plus carriage return.
NSString *myString = @"My String\n";
// Create the formatted string "1 String".
NSString *anotherString = [NSString stringWithFormat:@"%d %@", 1, @"String"];
// Create an Objective-C string from a C string.
NSString *fromCString = [NSString stringWithCString:"A C string"
encoding:NSUTF8StringEncoding];
数字(NSNumber)

可以创建 NSNumber 对象,表示无符号整型 (unsigned integers)、长整型 (long integers)、长长整型 (long long integers) 和浮点值 (float values),方法是将字符“U”、“L”、“LL”和“F”分别追加到记号值末尾。例如, 创建封装浮点值的 NSNumber 对象,可以编写如下代码:

NSNumber *myFloatValue = @3.2F
集对象:
  • 数组(NSArray / NSMutableArray)
  • 集合(NSSet / NSMutableSet)
  • 字典(NSDictionary / NSMutableDictionary)
  • 使用 NSNull 表示 nil

入门demo可以阅读苹果官方已失传的详细教程:https://download.csdn.net/download/perry0528/11058022

完成demo后实现效果如下所示:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值