对于 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/