iOS从零开始,使⽤Swift:UIKit的第⼀步
UIKit是开发iOS应⽤程序时最常使⽤的框架。 它定义了iOS应⽤程序的核⼼组件,从标签和按钮到表格视图和导航控制器。 在本⽂中,我们不仅将开始UIKit框架的探索,还将探索iOS项⽬的内部结构和iOS应⽤程序的基本构建块。
什么是UIKit框架?
虽然Foundation框架为iOS和OS X开发定义了类,协议和功能,但UIKit框架专门针对iOS开发。 它等效于OS X开发的Application Kit或AppKit框架。
与Foundation⼀样,UIKit定义类,协议,函数,数据类型和常量。 它还通过使⽤Objective-C类别为各种Foundation类(例如NSObject , NSString和NSValue添加了附加功能。
使⽤Objective-C类别是⼀种⽅便的⽅法,可以在现有类中添加额外的⽅法,⽽⽆需⼦类化。 它们类似于Swift扩展。 如果您想了解有关Objective-C类别的更多信息,请阅读 。
与其像在Foundation框架中那样探索UIKit的关键类,不如创建并经历⼀个新的iOS项⽬,探索我们遇到的类。 通过采⽤这种⽅法,将很快清楚地知道在什么上下⽂中使⽤了⼀个类,每个类如何适合iOS应⽤程序的更⼴泛⽅案以及它扮演的⾓⾊。
⼀个新的开始
新建>项⽬... ,启动Xcode并创建⼀个新项⽬。 在左侧的iOS部分中,选择“ 应⽤程序”类别。 从项⽬模板列表中,选⽂件菜单中选择新建>项⽬...
从⽂件
择“ 单⼀视图应⽤程序”模板。
Single View Application模板包含iOS应⽤程序的基本构建块,这使其成为开始我们的旅程的好地⽅。
将项⽬命名为FirstSteps,然后输⼊组织名称和标识符。 将语⾔设置为Swift并将设备设置为iPhone 。 取消选中底部的复选框。
创建Git存储库复选框,告诉Xcode您要将新项⽬保存到何处,并确保将项⽬置于版本控制下。 请重新访问 ,以获在My Mac上选中创建Git存储库
通过在My Mac上
取有关版本控制及其好处的更多信息。
⽂件和⽂件夹
⾃从上次从头创建iOS项⽬以来,我们已经学到了很多新东西,因此最好探索新项⽬的各种⽂件和⽂件夹,看看它们是否响了起来。
在Project Navigator中 ,您应该在项⽬的根⽬录中看到两个⽂件夹:
产品展⽰
⼀个带有项⽬名称的⽂件夹,在此⽰例中为FirstSteps
FirstSteps
让我们看⼀下每个⽂件夹的内容。
产品展⽰
产品⽂件夹当前包含⼀项。 它带有项⽬的名称,并具有.app扩展名。 Products⽂件夹包含⼀个或多个应⽤程序,这些应⽤程序是在源代码编译后由项⽬创建的。
xcode怎么打开
.app以红⾊突出显⽰? 每当Xcode⽆法到⽂件时,它都会以红⾊突出显⽰该⽂件。 不过不要担⼼。 由于尚FirstSteps .app
您是否注意到FirstSteps
未编译项⽬,因此Xcode尚未创建产品。
项⽬⽂件夹
您的⼤部分时间都花在项⽬⽂件夹中,该⽂件夹当前包含六个⽂件。 前两个⽂件AppDelegate.swift和ViewController .swift是源⽂件。这些⽂件包含应⽤程序的源代码。
Main.storyboard包含应⽤程序的⽤户界⾯。 我们已经在本系列前⾯的情节提要中使⽤过。 注意,还有另⼀个故事板,
LaunchScreen.storyboard 。 启动应⽤程序时,操作系统将使⽤此情节提要。 操作系统没有显⽰空视图,⽽是使⽤此情节提要板动态创建启动图像,该图像在加载应⽤程序时显⽰给⽤户。
Info.plist ,通常称为项⽬的“ info-dot-plist”⽂件,是⼀个包含各种配置设置的属性列表。 这些设置中的⼤多数也可以通过以下⽅式修
功能 ”和“ 信息”
信息”选项卡。
常规” ,“ 功能
改:在“ 项⽬浏览器”中选择项⽬ ,在“ ⽬标”列表中选择⽬标 ,然后打开“ 常规”
应⽤组件
既然我们知道了项⽬中不同的⽂件和⽂件夹的⽤途,现在是时候探索iOS应⽤程序的不同组件了。 在继续前进的过程中,我们将遇到⼏个属于UIKit的类。 属于UIKit框架的每个类都以类前缀UI开头。 请记住,Foundation类以NS为前缀。
模型-视图-控制器模式
在我们开始探索UIKit框架之前,我想谈谈Model-View-Controller(MVC)模式。 MVC模式是⾯向对象编程中最⼴泛使⽤的模式之⼀。它提⾼了代码的可重⽤性,并且与职责分离或关注点的概念紧密相
关。 MVC模式的主要⽬标之⼀是将应⽤程序的业务逻辑与表⽰层分离。Cocoa Touch包含MVC模式,这意味着了解它是什么以及它如何⼯作很重要。 换句话说,通过了解MVC模式,将更容易掌握iOS应⽤程序的不同组件如何协同⼯作。
在MVC模式中,模型层控制着应⽤程序的业务逻辑。 例如,与数据库交互是模型层的责任。 视图层将由模型层管理的数据呈现给⽤户。视图层管理⽤户界⾯和⽤户输⼊。
控制器是模型层和视图层之间的粘合剂。 虽然模型层和视图层不知道彼此的存在,但控制器却两者都知道。
因为控制器了解模型和视图,所以它通常是应⽤程序中最少可重⽤的部分。 对象对环境及其交互的对象了解得越少,重⽤就越容易。UIApplication
即使UIApplication类是每个iOS应⽤程序的关键组成部分,您也不会经常与之交互,并且即使有过,您也很少会觉得需要UIApplication 。
启动应⽤程序时,将创建此类的单例。 您还记得什么是吗? 这意味着在应⽤程序的⽣命周期内只能创建UIApplication类的⼀个对象实例。
UIApplication实例是⽤户交互的⼊⼝点,它将事件分配到适当的⽬标对象。 ⼏分钟后,当我们查看视
图控制器时,其确切含义将变得清晰。
在iOS应⽤程序中, UIApplication实例具有与之关联的委托对象。 每当您使⽤提供的模板之⼀创建iOS项⽬时,Xcode都会为您创建⼀个应
AppDelegate.swift 。
⽤程序委托类。 在“ 项⽬浏览器”的项⽬⽂件夹中查看源⽂件的名称。 第⼀个⽂件名为AppDelegate.swift
此类的实例是UIApplication单例的委托。 在仔细研究AppDelegate类之前,我们需要了解什么是委托模式。
Ole Begemann写介绍了典型iOS应⽤程序的启动顺序。 Ole在他的⽂章中讨论了所涉及的各种组件及其在应⽤程序启动过程中的作⽤。 如果您想更好地了解UIApplication类的⾓⾊,我强烈建议您阅读本⽂。
委托模式
委托模式已在Cocoa和Cocoa Touch中⼴泛使⽤。 在本系列的后续⽂章中,我们将探讨表视图的来龙去脉,您将发现表视图在很⼤程度上依赖于委托(和数据源)模式。
像MVC模式⼀样,委托在⾯向对象的编程中很常见。 但是,Cocoa Touch中的委托模式略有不同,因为它利⽤委托协议来定义委托对象的⾏为。
让我们继续前进,看看表视图。 如果您花了很多时间在iPhone或iPad上,那么UITableView类应该很熟悉。 它向⽤户显⽰数据的有序列表,并且可以很好地完成此⼯作。
轻按⼀⾏时,表视图如何知道该怎么办? 此⾏为是否包含在UITableView类中? 当然不是,因为此⾏为因应⽤程序⽽异。 如果我们将这种⾏为包含在UITableView类中,它将不会⾮常重⽤。
表格视图将此职责外包给委托对象。 换句话说,它将这个任务委托给另⼀个对象,⼀个委托对象。 花点时间检查类的 。 它具有两个名
为dataSource和delegate属性。 当⽤户点击⼀⾏时,表视图会通知该delegate 。 委托对象负责响应该触摸事件。
表格视图的数据源是相似的。 主要区别在于,表视图向数据源对象询问某些内容,即它需要显⽰的数据。
委托和数据源对象,例如表视图的delegate和dataSource对象,⼏乎总是⾃定义类。 在⼤多数情况下,由开发⼈员创建和实现这些类,因为它们的实现是特定于每个应⽤程序的。
申请代表
现在我们知道了什么是委派,是时候探索为我们创建的AppDelegate类Xcode了。 在应⽤程序启动时,应⽤程序创建AppDelegate类的实例。 然后,将此AppDelegate实例设置为为您的应⽤程序创建的操作系统UIApplication实例的委托。 您永远不会显式实例化应⽤程序委托对象。
AppDelegate.swift以检查AppDelegate类的实现。 忽略顶部的注释,第⼀⾏将导⼊UIKit框架,以便我们可以使⽤其类和协议。
打开AppDelegate.swift
import UIKit
在下⼀⾏,我们看到⼀个尚未涉及的属性。 Swift中的属性以@符号开头,可以看作是编译器的指令。 @UIApplicationMain属性告诉编译器AppDelegate是应作为应⽤程序委托使⽤的类。 到⽬前为⽌,您只需要了解此属性。
@UIApplicationMain
下⼀⾏应该看起来很熟悉。 这是AppDelegate类的声明的开始。 它指定类的名称以及该类的⽗类UIResponder 。
它还告诉编译器AppDelegate符合UIApplicationDelegate协议。 这并不奇怪,因为我们已经知道AppDelegate充当应⽤程序的委托。
class AppDelegate: UIResponder, UIApplicationDelegate {
...
}
下⼀⾏是window属性的属性声明。 请注意,该属性是UIWindow?类型的变量UIWindow? 。 UIWindow类是UIView的⼦类, UIView是iOS 上视图的基类。
var window: UIWindow?
AppDelegate类的接⼝中最有趣的部分是UIApplicationDelegate协议。 查看的获取协议定义的⽅法的完整列表。
该协议定义了许多⽅法,我⿎励您探索其中的⼀些⽅法,以了解该协议的功能。 在这⼀点上,我们最感兴趣的⽅法
是application(_:didFinishLaunchingWithOptions:) 。
当UIApplication对象完成启动应⽤程序的准备时,它将通知其委托AppDelegate对象该应⽤程序即将启动。
为什么它将此事件通知应⽤程序委托? UIApplication实例将此事件通知其委托⼈,以便它有机会为应⽤程序启动做准备。 如以下所⽰,application(_:didFinishLaunchingWithOptions:)的实现⾮常短。
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Override point for customization after application launch.
return true
}
它提供了对UIApplication实例的引⽤和选项字典。 您可以暂时忽略选项字典。 为确保应⽤程序由操作系统启动,我们返回true 。
故事板
提要板名
Xcode项⽬包含另⼀个有趣的⽂件Main.storyboard
Main.storyboard 。 故事板定义了应⽤程序的⽤户界⾯。 默认情况下,情节提要Main.storyboard 。 选择情节提要以将其打开。
为Main.storyboard
情节提要当前在中央⼯作区中包含⼀个视图。 在项⽬浏览器
项⽬浏览器的右侧,您可以看到项⽬列表,这些项⽬是您在视图中看到的对象。 顶层项View Controller Scene包含⼀个⼦项⽬View Controller
View Controller 。
⽬View Controller Scene
View的对象。 记住有关MVC模式的讨论。 现在,您可View Controller对象也有许多⼦项,但是有⼀个我们特别感兴趣的⼦项, 名为View
View Controller
View Controller对象。
以看到正在运⾏的MVC模式。 该模型⽬前尚不存在,但是我们确实有⼀个视图View
View对象和⼀个控制器View Controller
启动应⽤程序时,情节提要⽤于创建应⽤程序的⽤户界⾯。 视图控制器⾃动实例化,视图控制器的视
图也⾃动实例化。 情节提要中View对象由视图控制器管理。
的View

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。