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 继承(这对我来说真的很奇怪,我不明白这个逻辑)。

有没有办法设置它,以便共享弹出框出现指向栏按钮项?

谢谢,

【问题讨论】:

你看过UIPopoverPresentationControllerbarButtonItem属性了吗? 哦,我意识到有 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 背景颜色

UIActivityViewController 共享 UIActivity 未显示

UIActivityViewController 不适用于 WKWebView

限制 UIActivityViewController 共享扩展活动

尝试呈现 UIActivityViewController 时崩溃

更改 UIActivityViewController 的 navigationBar 的颜色