上下文菜单
Apple Watch 上 Retina 屏的 Force Touch 提供了一种新的与内容交互的方式。与点击屏幕上的项目不同,该特性需要一定的压力才能激活与当前界面控制器相关的上下文菜单(如果有的话)。上下文菜单是可选择的。您用上下文菜单显示与当前屏幕相关的操作。WatchKit 在内容之上显示菜单,如图 11-1。
图 11-1 一个包含三个项目的上下文菜单
上下文菜单可以显示多达 4 个动作(action)。每个动作由一个标题和一张图片表示。点击某个动作的图片会关闭菜单并执行相应的方法。点击屏幕上其他的地方只能关闭菜单。
设计菜单项
每个菜单项包含一个可点击区域和一个标题。可点击区域包括圆形背景,顶部是您所提供的图片。这张图片必须是模板图片,其 alpha 通道决定了绘制在背景顶部的形状。图片的不透明部分显示为黑色,全部或者部分半透明可透出背景颜色。
您所提供的模板图片应当比它们所在的圆形背景要小一点。关于菜单图片的尺寸和创建图片指南的更多信息,请参考 Apple Watch Human Interface Guidelines。
为界面控制器添加上下文菜单
您可以在设计时配置界面控制器的上下文菜单,但是也可以在运行时添加和移除菜单项。在设计时,编辑 storyboard 包括您想在指定的界面控制器上显示的菜单项。当之后初始化界面控制器的时候,您可以添加菜单项来补充在 storyboard 中所创建的。通过代码创建的菜单项也可以删除。不管您是在 storyboard 中拖入菜单项还是通过代码添加,菜单中的菜单项不能超过 4 个。
在界面控制器中添加上下文菜单
- 打开 storyboard 文件。
- 从工具库(library)中拖拽一个菜单对象并添加到界面控制器场景中。
最初的菜单包含一个单独的菜单项。 - 最多从工具库中拖拽 3 个菜单项到菜单中。
您也可以用菜单的属性检查器(Attributes inspector)来设置菜单项的数量。您所添加的菜单项不能通过编程删除。 - 对于每一个菜单项,用属性检查器(Attributes inspector)指定菜单的标题和图片。两者都是需要的。
- 在界面控制器类中将每个菜单项与操作方法连接起来。
菜单的操作(action) 方法有以下格式:
- (IBAction)doMenuItemAction
- 保存storyboard文件。
想要在运行时添加菜单项,调用界面控制器对象的 addMenuItemWithImage:title:action: 或者 addMenuItemWithImageNamed:title:action: 方法。您指定的菜单项被附加到 storyboard 文件的菜单中。通过编程方式一直附属于菜单直到你明确移除它们或者界面控制器被销毁。
处理菜单项的点击
当用户点击菜单项时,WatchKit 关闭菜单并调用相关的动作方法。您可以在界面控制器中通过下面的语法来定义动作方法:
// SWIFT
@IBAction func doMenuAction() {
// Handle menu action.
}
// OBJECTIVE-C
- (IBAction)doMenuItemAction {
// Handle menu action.
}
如果要求使用任何状态信息来执行操作,那您需要在界面控制器中存储并保持这些信息。举个例子来说,如果一个动作依赖于表的当前选中行,您的界面控制器必须包含一个变量来跟踪当前选中行。如果您需要用户点击菜单动作之后的更多信息,那动作方法必须显示一个模态界面控制器。