首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSSharingService -删除facebook和twitter并添加打印内容

NSSharingService -删除facebook和twitter并添加打印内容
EN

Stack Overflow用户
提问于 2013-04-18 02:46:13
回答 5查看 1.2K关注 0票数 2

我刚刚实现了一个共享按钮,它有一个共享菜单:

代码语言:javascript
复制
 [_shareButton sendActionOn:NSLeftMouseDownMask];

并连接了此操作:

代码语言:javascript
复制
-(IBAction)share:(id)sender {   
    NSArray *shareArray = @[@"testShare"];
    NSSharingServicePicker *sharingServicePicker = [[NSSharingServicePicker alloc] initWithItems:shareArray];
    sharingServicePicker.delegate = self;

    [sharingServicePicker showRelativeToRect:[sender bounds]
                                      ofView:sender
                               preferredEdge:NSMinYEdge];
}

现在我的问题是,我不希望Facebook和Twitter成为菜单中的一个选项。我只希望电子邮件和消息可用。我还想添加“打印”,但不知道我是否可以做到这一点。

这有可能吗?

谢谢

(没有足够的代表点将'NSSharingService‘添加为标签)

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-05-23 15:19:18

使用proposedSharingServices解决了这个问题。

代码语言:javascript
复制
- (NSArray *)sharingServicePicker:(NSSharingServicePicker *)sharingServicePicker sharingServicesForItems:(NSArray *)items proposedSharingServices:(NSArray *)proposedServices{

// Find and the services you want
NSMutableArray *newProposedServices = [[NSMutableArray alloc] initWithCapacity:5];
for (NSSharingService *sharingService in proposedServices) {
    if ([[sharingService title] isEqualToString:@"Email"] || [[sharingService title] isEqualToString:@"Message"]) {
        [newProposedServices addObject:sharingService];
    }
}
NSArray *services = newProposedServices;

NSSharingService *customService = [[NSSharingService alloc] initWithTitle:@"Print" image:[NSImage imageNamed:@"PrintImage"] alternateImage:nil handler:^{
    // Do whatever
}];

services = [services arrayByAddingObject:customService];

return services;

}

票数 1
EN

Stack Overflow用户

发布于 2015-10-09 21:59:24

将建议的服务与新命名的实例进行比较是可行的。下面是我的项目中的一个简单的Swift代码:

代码语言:javascript
复制
let excludedNames = [
    NSSharingServiceNamePostOnFacebook,
    NSSharingServiceNamePostOnTwitter,
]

var excludedServices = [NSSharingService]()

for name in excludedNames {
    if let service = NSSharingService(named: name) {
        excludedServices += [service]
    }
}

return proposedServices.filter {
    !excludedServices.contains($0)
}

不需要使用私有name属性。

票数 1
EN

Stack Overflow用户

发布于 2016-10-02 02:30:13

与其试图说出你不想要的东西,不如简单地返回一个你想要的列表。

代码语言:javascript
复制
- (NSArray<NSSharingService *> *)sharingServicePicker:(NSSharingServicePicker *)sharingServicePicker sharingServicesForItems:(NSArray *)items proposedSharingServices:(NSArray<NSSharingService *> *)proposedServices
{
    NSArray *result = @[[NSSharingService sharingServiceNamed:NSSharingServiceNameComposeEmail], [NSSharingService sharingServiceNamed:NSSharingServiceNameComposeMessage]];
    return result;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16067744

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档