![](/img/trans.png)
[英]Share extension with custom class instead of SLComposeServiceViewController
[英]Getting the URL in SLComposeServiceViewController in a Share Extension for Safari on iOS
这个问题以前可能以不同的形式被问过,但我正在尝试更深入地理解共享扩展,因此,这个问题比之前提出的这个问题的版本更详细。
在编写共享扩展时,我们可以继承 SLComposeServiceViewController 并获取 viewDidLoad() 和 didSelectPost() 事件等,但根据 Apple 文档,VC 上唯一的属性是 contentText 和 textView 以及占位符属性
鉴于这种情况,执行以下操作的最佳方法是什么:
首先,用网站的URL填充出现的VC
其次,访问URL传递给sharedDefaults如下
let shareDefaults = NSUserDefaults(suiteName: "groupName")
shareDefaults?.setObject(self.contentText, forKey: "stringKey")
shareDefaults?.synchronize()
以便能够保存它以供以后从应用程序访问。
任何有关获取 URL 的帮助将不胜感激。
您可以像这样访问 URL:
- (void)didSelectPost {
NSExtensionItem *item = self.extensionContext.inputItems.firstObject;
NSItemProvider *itemProvider = item.attachments.firstObject;
if ([itemProvider hasItemConformingToTypeIdentifier:@"public.url"]) {
[itemProvider loadItemForTypeIdentifier:@"public.url"
options:nil
completionHandler:^(NSURL *url, NSError *error) {
// Do what you want to do with url
[self.extensionContext completeRequestReturningItems:@[]
completionHandler:nil];
}];
}
}
在 Swift 中也是如此:
override func didSelectPost() {
if let item = extensionContext?.inputItems.first as? NSExtensionItem {
if let itemProvider = item.attachments?.first as? NSItemProvider {
if itemProvider.hasItemConformingToTypeIdentifier("public.url") {
itemProvider.loadItemForTypeIdentifier("public.url", options: nil, completionHandler: { (url, error) -> Void in
if let shareURL = url as? NSURL {
// do what you want to do with shareURL
}
self.extensionContext?.completeRequestReturningItems([], completionHandler:nil)
})
}
}
}
}
为 Swift 5 更新:
override func didSelectPost() {
if let item = extensionContext?.inputItems.first as? NSExtensionItem {
if let itemProvider = item.attachments?.first {
if itemProvider.hasItemConformingToTypeIdentifier("public.url") {
itemProvider.loadItem(forTypeIdentifier: "public.url", options: nil, completionHandler: { (url, error) -> Void in
if let shareURL = url as? NSURL {
// do what you want to do with shareURL
}
self.extensionContext?.completeRequest(returningItems: [], completionHandler:nil)
})
}
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.