UIActivityViewController 将 sourceView 设置为 UIBarButtonItem
Posted
技术标签:
【中文标题】UIActivityViewController 将 sourceView 设置为 UIBarButtonItem【英文标题】:UIActivityViewController set sourceView to UIBarButtonItem 【发布时间】:2015-12-12 19:39:32 【问题描述】:对于 iPhone/iPad 应用,我可以在有人点击 UIBarButtonItem 时进行分享。
UIActivityViewController * activityVC = [[UIActivityViewController alloc] initWithActivityItems:shareItems applicationActivities:nil];
[self presentViewController:activityVC animated:YES completion:nil];
但是对于 iPad,此代码错误,因为我需要为 activityVC 设置 sourceView。
所以我需要添加这段代码,但是将它设置为 UIBarButtonItem 的位置。
activityVC.popoverPresentationController.sourceView = SomeUIBarButtonItem;
但这不起作用,因为 UIBarButtonItem 没有从 UIView 继承(这对我来说真的很奇怪,我不明白这个逻辑)。
有没有办法设置它,以便共享弹出框出现指向栏按钮项?
谢谢,
【问题讨论】:
你看过UIPopoverPresentationController
的barButtonItem
属性了吗?
哦,我意识到有 barButtonItem,它按预期工作!感谢您的帮助!
【参考方案1】:
您需要做的就是使用弹出框的 barButtonItem 属性。
因此,在 iPad 上支持 ActivityViewController 或 UIAlertController 的正确代码:
popover.barButtonItem = self.navigationItem.rightBarButtonItem;
另一个完全支持 iPad 的示例,使用 UIAlertController(但与 ActivityViewController 相同):
UIPopoverPresentationController *popover = alert.popoverPresentationController;
if (popover)
popover.barButtonItem = self.navigationItem.rightBarButtonItem;
popover.permittedArrowDirections = UIPopoverArrowDirectionUp;
[self presentViewController:alert animated:YES completion:nil];
Swift 4.2
if let popover = alert.popoverPresentationController
popover.barButtonItem = self.navigationItem.rightBarButtonItem
popover.permittedArrowDirections = .up
self.present(alert, animated: true, completion: nil)
【讨论】:
以上是关于UIActivityViewController 将 sourceView 设置为 UIBarButtonItem的主要内容,如果未能解决你的问题,请参考以下文章
UIActivityViewController 共享 UIActivity 未显示
UIActivityViewController 不适用于 WKWebView
限制 UIActivityViewController 共享扩展活动