本文翻译自Apple Watch Programming Guide:Interface Navigation,敬请勘误。
对于内容超过一屏的WatchKit app来说,您必须在设计时选择一个导航类型。您所选择的导航类型定义了如何在应用程序中展示和管理界面控制器。WatchKit支持两种互斥的界面风格:
- 分层风格
- 分页风格
这两种导航都可以模态形式展示一个或多个界面。当您想暂时打断用户的工作流程以请求输入或者展示信息时,适合使用模态形式。当模态地展示两个或多个界面控制器时,系统会以一系列的页面展示它们,类似于基于分页的导航。
实现分层界面(Implementing a Hierarchical Interface)
分层界面主要针对分层的数据集,用户可在此选择某个条目以展示相关详细信息。分层界面通常始于单个的根界面控制器。在该界面控制器中,您可以通过调用当前界面控制器的pushControllerWithName:context:方法在屏幕上推出一个新的界面控制器。通常,当用户点击按钮或表格行时,您可以从动作方法中调用该方法。每个新的界面控制器可展示下一级分层中的信息。
当在屏幕上推出新的界面控制器时,会将数据对象传递给pushControllerWithName:context:方法的上下文参数。在新界面控制器展示在屏幕上之前,这个上下文对象就是您与其通信的机会。您可以使用该对象来告知界面控制器展示什么样的数据或者传达什么样的状态信息。
想要解除界面控制器,可调用其popController方法。用户也可以直接从屏幕的左边缘轻扫解除界面控制器。界面控制器解除后即失效,而先前的界面控制器将会重新展示。根界面控制器不能被解除。
实现基于分页的界面(Implementing a Page-Based Interface)
基于分页的界面主要针对本质上没有分层的数据。分页界面包含两个或者多个独立的界面控制器,并且在指定时间内仅展示其中一个界面。在运行时,通过向左/右轻扫屏幕进行导航。屏幕底部的圆点指示器控件指示用户当前的位置。
在设计过程中,您可以创建下一页的segue,以便在app的storyboard文件中配置分页界面。想要创建该segue:
1.对您希望作为第一屏的界面控制器执行Control-click操作,并将其拖拽到不同的界面控制器中。
应该强调第二个界面控制器,以指明segue是可用的。
2.释放鼠标按钮。
3.从relationship segue面板中选择next page。
通常在storyboard文件中配置一组初始的页面集合。当app启动时,WatchKit会实例化和初始化您的初始界面控制器,然后是分页界面中的其他界面控制器。如果您想改变一组界面控制器,请在初始界面控制器的init方法中调用reloadRootControllersWithNames:contexts:方法。调用该方法会使得WatchKit在尝试展示界面中任何其他页面之前加载新的界面控制器。您也可以在app运行时调用reloadRootControllersWithNames:contexts:方法来改变展示中的页面集合。
当系统加载您的WatchKit app界面时,它将实例化和初始化组成界面的所有界面控制器。当用户从一个界面控制器切换至下一个时,它将调用当前界面控制器的didDeactivate方法,以及即将展示的界面控制器的willActivate方法。willActivate方法可确保界面中的信息是最新的。
以模态形式展示界面控制器(Presenting Interface Controllers Modally)
模态界面可临时中断当前导航流以提示用户或者展示信息。您可以使用分页界面或分层界面来组成一个模态界面。想要模态地展示界面控制器,请从当前可视界面中调用以下方法之一:
- 调用presentControllerWithName:context:方法来模态地展示单个界面控制器。
- 调用presentControllerWithNames:contexts:方法展示两个或者多个使用分页布局的界面控制器。
模态界面的左上角包含一个文本标签,当点击时会解除界面。如果您没有为该标签指定一个准确的字符串,那么WatchKit会自动为其使用"Cancel"。您可以根据需要更改字符串,以反映解除模态视图的真实用意。比如,当展示那些您不希望用户响应的内容时,您可能会将字符串更改为"Done"或 "Close"。如果您使用了"Cancel"字符串,那要考虑为接受模态界面中的任何更改添加一个或多个按钮。
原创文章,作者:ioued,如若转载,请注明出处:https://www.iamue.com/6255/