此文中我会用 Segues 来完成一个控制器连接到另一个控制器。
Segues 是 Interface Builder 里面功能最强大的东西,它允许我们从一个控制器连接到另一个控制器,或者是从控制器的一个 UI 控件(比如按钮)连接到另一个控制器。方法有二:
方法一:
创建一个 Single View App 项目,此时的 Storyboard 中只有一个控制器视图。
从对象库中拖拽一个新的视图控制器到 Storyboard 中,此时 Storyboard 中包含了2个视图控制器。
拖拽一个 Button 到第一个视图控制器中,然后在 Button 上按住鼠标右键拖拽到第二个视图控制器,此时会建立一条 Segue ,Segue 的原点就是刚才点击的按钮,终点是第二个视图控制器。在弹出的快捷菜单中,会有很多不同类型选项。如图:
其中 Show 是最简单的连接方式,它会以从底部向上滑动的方式呈现第二个控制器视图,当 Segue 创建好了以后,在控制器视图之间会有一个箭头,如上图中间灰色图形。
构建并运行项目,点击按钮后会进入第二个控制器视图。
(注:此时的第二个视图控制器没有关联任何类或实体类文件)
接下来我们创建与之关联的类文件。
在第一个视图控制器所在文件夹下新建一个 iOS/Cocoa Touch Class 类型的文件, Class 可以设置为 SecondViewController,确保 Subclass of 设置为 UIViewController。
创建完毕后我们要将该代码文件与 Storyboard 中的第二个视图控制器关联起来。在第二个视图控制器的 Identifier Inspector 中将 Class 设置为 SecondViewController,此时关联成功。
方法二:
时间机器回到刚才两个视图控制器还没有任何操作的时刻。不从按钮处链接第二个视图控制器。从如图所示处连接:
然后在展示的快捷菜单中选择 Show ,即可添加 Segue 连接。
接着在选中 Segue ,在右侧 Attributes Inspector 中将 Identifier 设置为 goToSecondScreen 然后就可以在代码中访问这个 goToSecondScreen。
接着为第一个视图控制器的 Button 设置 IBAction 方法,名称可以定义为 buttonPressed。
@IBAction func buttonPressed(_sender:UIButton) {
performSegue(withIdentifier: "goToSecondScreen", sender: self)
}
performSegueg() 方法用于执行一个 Segue 连接,其中第一个参数代表要执行的 Segue 标
识.也就是之前在故事板中设置的 Identifier ,第二个参数是这个 Segue 的发起者,因为是第一个控制器发起的,所以这里使用 self 。
使用这种方式的好处在于,如果App需要用户在单击某个按钮以后,根据不同的情况呈现不同控制器到屏幕上,则需要创建多个 Segue ,再根据情况执行特定的 Segue。
构建并运行项目,单击按钮以后在屏幕上依然会呈现第二控制器。