Xamarin 中的 watchOS 菜单控件(压力触摸)

Watch Kit 提供了压力触摸手势,在手表应用屏幕上实现时,该手势会触发菜单。

显示菜单的 Apple Watch

响应压力触摸

如果已为接口控制器实现了 Menu,则当用户执行压力触摸时,将显示菜单。 如果未实现菜单,屏幕会短暂动画显示,但不会发生其他操作。

压力触摸与屏幕上的任何特定元素无关;接口控制器上只能附加一个菜单,并且无论在屏幕上的哪个位置按下压力触摸,该菜单都会出现。

可以呈现一到四个菜单选项。

添加菜单

必须在设计时将 Menu 添加到情节提要上的 InterfaceController。 将菜单控件拖放到接口控制器上时,情节提要预览上不会出现任何视觉指示,但“菜单”会出现在“文档大纲”板中

在设计时编辑菜单

在菜单控件中最多可以添加四个菜单项。 可以在“属性”板中配置它们。 可以设置以下属性:

  • 标题,以及
  • 自定义图像,或者
  • 系统图像:接受、添加、阻止、拒绝、信息、也许、更多、静音、暂停、播放、重复、恢复、共享、随机播放、扬声器、垃圾箱。

通过选择“属性”面板的“事件”部分并键入操作方法的名称来创建 Action。 将在代码中创建一个部分方法,可以在接口控制器类中实现该方法,如下所示:

partial void MenuItemTapped ()
{
    Console.WriteLine ("A menu item was tapped.");
}

自定义映像

与 iOS 中的选项卡图像类似,菜单项图像需要带有 Alpha 通道的不透明图案,以允许背景显示出来。

应该将用于菜单的图像添加到手表应用项目(而不是手表应用扩展项目)以获得最佳性能。

更改菜单项

在运行时添加

尽管能够以编程方式更改 MenuItem 的集合,但无法在运行时将 Menu 添加到接口控制器。 如下所示使用 AddMenuItem 方法:

AddMenuItem (WKMenuItemIcon.Accept, "Yes", new ObjCRuntime.Selector ("tapped"));

Xamarin.iOS Watch Kit API 目前需要 AdMenuItem 方法的 selector,其声明应如下所示:

[Export("tapped")]
void MenuItemTapped ()
{
    Console.WriteLine ("The dynamically added 'Yes' menu item was tapped.");
}

在运行时删除

可以调用 ClearAllMenuItems 方法来删除所有以编程方式添加的菜单项

无法清除情节提要中配置的菜单项。