界面导航
对于多于一个屏幕内容的WatchKit app,你必须选择一种导航界面的技术. WatchKit app包含两种独立的导航样式:
* 基于页式 这种样式适合带有简单数据的app,他们页与页直接的数据关系不紧密. 基于页式的界面包含两个或者更多的独立界面控制器,在任何时间都只会展示其中的一个. 在运行期,用户通过在屏幕上左右滑动来导航界面控制器. 在屏幕底部的点标记符表示用户当前所在页面的位置.
* 分级 这种样式适合更复杂的模型,或者这个app的数据是多级的.一个分级的界面总是以一个单一的根控制器为起点. 在这种控制器中,你提供控制,当你点击时,你在界面上推进一个新的界面控制器.
尽管你不能在你的app中混合基于页式和分级的导航样式,你可以使用模态方式,来应用这些导航样式. 模态方式是一种中断当前工作流,去请求数据,展示信息的方法. 你可以从基于页式和分级的app中模态的展示界面控制器. 模态的展示包含一个单独的界面或者以页式布局的多个界面.
实现一个页式的界面
你可以通过创建指向下一个界面控制器的segue,在你的app故事板中配置一个页式的界面.
* 创建一个界面控制器中间的页式segue.
1. 在你的故事板中,在你的界面中为每一页增加界面控制器.
2. 按住Control点击你的主界面控制器,拖拽一个segue线指向另一个界面控制器. 第二个界面控制器应该高亮,表明这个segue是可行的.
3. 是否鼠标按钮
4. 从当前的segue关系面板中选择“下一页”.
5. 使用同样的方法,创建一个从一个界面控制器指向下一个的segue. 你创建segue的顺序决定了你的界面中页的顺序.
在故事板中创建的segue定义了当你的app启动的时候的页式界面. 你可以在启动生命周期的早期,通过调用reloadRootControllersWithNames:contexts来改变页面集合. 例如,你可以通过调用主界面控制器的init方法去强制WatchKit来加载一个不同的集合.
所有基于页式的界面控制器都在界面被展示之前被初始化,但在同一个时刻只有一个界面控制器被展示. 正常的,WatchKit 展示在序列中定义的第一个界面控制器. 通过在init或者awakeWithContext中调用becomeCurrentPage方法来改变初始被展示的界面控制器.
伴随着用户一页一页的导航界面,WatchKit相应的激活或者释放界面控制器.在过渡期间,当前可视的界面控制器的didDeactivate方法被调用.随后将要被展示的界面控制器的willActivate方法被调用. 使用willActivate方法在最后一分钟来更新界面控制器的内容.
实现一个层次界面
在层次界面控制器中,你在当前的界面控制器使用segue或者pushControllerWithName:context:来告诉Watchkit什么时候转换到一个新的界面. 在故事板中,你在button,group,table row上创建一个segue从一个界面控制器到另一个界面控制器. 如果你想动态的push转换,你可以在任何界面控制器中调用pushControllerWithName:context:方法.
当push一个新的界面控制器到界面时,建议在pushControllerWithName:context方法的参数中传递一个数据对象.这个上下文对象是界面展示到屏幕之前的状态信息.使用这个对象来告诉新的界面控制器来展示什么数据.
被推进的界面控制器在屏幕的左上角有个返回的标记,表明用户可以返回.当用户点击屏幕的左上角或者左侧边缘右滑时,WatchKit 自动消失最上面的界面控制器.你可以通过程序调用popController方法来消失界面控制器. 你不能够取消主界面控制器.
模态的展示界面控制器
模态控制器是一种临时中断当前导航流程来提示或者展示信息给用户的方式.你可以从任何界面控制展示一个模态控制器,而不用考虑你的app的导航样式. 按如下的流程来展示一个模态控制器:
* 在故事板中创建一个模态的segue
* 调用presentControllerWithName:context方法来展示一个模态控制器
* 通过使用页式布局,调用presentControllerWithName:contexts方法来展示两个或者多个模态的界面控制器.
当创建一个模态segue,链接这个segue到你想展示的界面控制器.当使用一个segue去展示多个界面控制器,首先,使用下一个页面segue去把模态控制器链接起来, 采用同样的方式把页式的界面控制器链接起来. 你的模态segue应该组内的第一个界面控制器连起来. 如果你链接组中间的界面控制器,在组中处理的界面控制器不会被展示.
模态控制器的左上角展示了界面控制器的标题. 用户点击这个标题,WatchKit 把模态控制器取消. 设置标题以其能反映界面控制器消失的意义. 例如,当展示信息的时候,你可能设置字符串为Done或者Close,如果是你不为控制器指定标题,WatchKit 默认用Cancel字符串.