ios - QuickLook ShouldOpenUrl 委托方法未触发
问题描述
我QuickLook
用于预览图像、Pdf 和 Microsoft Office 文档。预览文档工作正常,但ShouldOpenUrl
每当我尝试从文档打开链接时,它的委托方法都不会触发。以下是我尝试过的代码。
我使用具有 iOS v11 的 iPhone 和 iPad 测试我的应用程序。
// Open documents using title and file url
public void OpenDocument(string title, string url)
{
var rootViewController = UIApplication.SharedApplication.KeyWindow.RootViewController;
var previewViewController = new QLPreviewController();
previewViewController.DataSource = new DocumentPreviewDataSource(title, url);
previewViewController.Delegate = new PreviewControllerDelegate();
rootViewController.PresentViewController(previewViewController, true, null);
}
// QLPreviewControllerDelegate Implementation
public class PreviewControllerDelegate : QLPreviewControllerDelegate
{
public override bool ShouldOpenUrl(QLPreviewController controller, NSUrl url, IQLPreviewItem item)
{
Console.WriteLine("PreviewControllerDelegate::ShouldOpenUrl: {0}", url.AbsoluteString);
return true;
}
}
解决方案
您可以使用weakdelegate
public partial class xxxViewController : UIViewController,IQLPreviewControllerDelegate,IQLPreviewControllerDataSource
//. . .
在方法 OpenDocument
public void OpenDocument()
{
var previewViewController = new QLPreviewController();
previewViewController.View.Frame = View.Bounds;
previewViewController.WeakDelegate = this;
previewViewController.WeakDataSource = this;
this.PresentViewController(previewViewController, true,null);
}
并覆盖和中的
QLPreviewControllerDelegate
方法QLPreviewControllerDataSource
public nint PreviewItemCount(QLPreviewController controller)
{
return 1;
}
public IQLPreviewItem GetPreviewItem(QLPreviewController controller, nint index)
{
return new NSUrl("your url");
}
[Export("previewController:shouldOpenURL:forPreviewItem:")]
public bool ShouldOpenUrl(QLPreviewController controller, NSUrl url, IQLPreviewItem item)
{
Console.WriteLine("PreviewControllerDelegate::ShouldOpenUrl: {0}", url.AbsoluteString);
return true;
}
[Export("previewControllerWillDismiss:")]
public void WillDismiss(QLPreviewController controller)
{
// do some thing
}
我使用上面的代码,它工作正常。
推荐阅读
- php - 从电话号码中删除国家/地区代码?
- php - 从具有数组列的值给定的多维数组中搜索并获取数组值
- ios - Swift 使用 reduce 从布尔数组中计算分数
- hadoop - 如何使用 MR 引擎优化 Hive 查询?
- javascript - 密码生成器,如何让它返回足够强的密码
- javascript - 在角度 6 中找不到“object”类型的不同支持对象“[object Object]”
- azure-resource-manager - azure.ContainerGroups.ListByResourceGroup 引发资源未找到异常
- javascript - 将 Handlebars 转换为 React 映射语法
- python - 如何在 Django 中为模型编写测试?
- javascript - 在已安装的 App 中打开网站的 url