ios - UIActivityViewController 将 sourceView 设置为 UIBarButtonItem

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

有什么方法可以设置它,使共享弹出窗口指向栏按钮项目吗?

谢谢,

最佳答案

您需要做的就是使用弹出窗口的 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)

关于ios - UIActivityViewController 将 sourceView 设置为 UIBarButtonItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34244117/

相关文章:

iOS 照片库库?

iphone - NSDateFormatter 时区中带有冒号的日期/时间的日期格式

iphone - dateWithTimeIntervalSince1970 在创建事件时不起作用

objective-c - 使用 Restkit 为核心数据创建临时对象的更好方法

ios - 以编程方式从编辑器获取导航 Controller > 嵌入 > 导航 Controller

ios - 在 CloudKit 中获取 CKReferences 的最佳实践方法是什么?

ios - 为什么调整应用程序的 postinst 脚本因为应用程序图标消失了?

ios - Flutter 中的共享首选项错误 - Mac 上的 iOS

ios - 用户取消 3 次后重新启用 GameCenter(仅限 iOS7)

ios - 具有多个条件的 UITableView filteredArrayUsingPredicate?