UIActivityViewController将sourceView设置为UIBarButtonItem

时间:2015-12-12 19:39:33

标签: ios objective-c cocoa-touch

对于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继承(这对我来说真的很奇怪,而且我没有得到这个逻辑)。

是否有某种方法可以设置它以便共享弹出窗口显示指向条形按钮项目?

谢谢,

1 个答案:

答案 0 :(得分:30)

您需要做的就是使用popover的barButtonItem属性。

所以在iPad上支持ActivityViewController或UIAlertController的正确代码:

popover.barButtonItem = self.navigationItem.rightBarButtonItem;

使用UIAlertController完全支持iPad的另一个例子(但与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)