NSSharingService Sharing子菜单

Den*_*Vog 13 macos cocoa menu menuitem submenu

如何在Mac应用程序中添加"共享"子菜单?一个例子是Safari>文件>共享.我戳了Apple SharingServices示例代码,但它没有包含工作菜单项.

在此输入图像描述

现在我有一个按钮,在点击时显示可用共享服务的选择器:

NSMutableArray *shareItems = [NSMutableArray arrayWithObject:[self.noteSynopsisView string]];
NSSharingServicePicker *sharingServicePicker = [[NSSharingServicePicker alloc] initWithItems:shareItems];
sharingServicePicker.delegate = self;
[sharingServicePicker showRelativeToRect:[self.shareButton bounds] ofView:self.shareButton preferredEdge:NSMaxYEdge];
Run Code Online (Sandbox Code Playgroud)

我还在MainWindow.xib的File菜单下定义了一个Share子菜单项.

据我了解,NSSharingService列表正在动态生成.所以我不能真正预定义我在Interface Builder中创建的菜单项的服务.

谢谢你的帮助.

Mel*_*Mel 16

看看NSSharingService的+ sharingServicesForItems:.在-validateMenuItem:方法中,您可以使用它返回的NSSharingServices的-title和-image创建子菜单.将每个服务与每个菜单项相关联,并将每个菜单项的操作指向:

- (IBAction)shareFromService:(id)sender {
  [[sender representedObject] performWithItems: arrayOfItemsToShare];
}
Run Code Online (Sandbox Code Playgroud)

这真的很简单.Apple在这方面做得很好.

  • 它可能应该在 menuNeedsUpdate: 委托中完成,而不是 validateMenuItem。谢谢你的指导。 (2认同)

6 1*_*6 1 7

我发现要点可以帮助您轻松创建适当服务的子菜单. https://gist.github.com/eternalstorms/4132533

这是一个NSSharingServicePicker类别.