ios - QuickLook ShouldOpenUrl 委托(delegate)方法未触发

标签 ios swift xamarin.ios quicklook

我正在使用QuickLook预览图像、Pdf 和 Microsoft Office 文档。预览文档工作正常,但每当我尝试打开文档中的链接时,其 ShouldOpenUrl 委托(delegate)方法不会触发。以下是我尝试过的代码。

我使用装有 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
//. . . 

in method OpenDocument

public void OpenDocument()
{
  var previewViewController = new QLPreviewController();

  previewViewController.View.Frame = View.Bounds;

  previewViewController.WeakDelegate = this;

  previewViewController.WeakDataSource = this;

  this.PresentViewController(previewViewController, true,null);

}

And override the method in QLPreviewControllerDelegate and 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
}

我使用上面的代码,效果很好。

关于ios - QuickLook ShouldOpenUrl 委托(delegate)方法未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53172154/

相关文章:

ios - 动画在 ios playground 中不起作用

Swift - 如何管理转单管理?

ios - 得到无法识别的选择器 -replacementObjectForKeyedArchiver : crash when implementing NSCoding in Swift

xamarin.ios - 无法使滑动手势工作

xamarin.ios - 适用于 Xamarin.iOS 和 Xamarin.Android 的 Twilio 语音包

ios - UIToolbar 动画 alpha ios7

ios - SCNNode 方向而不是 eulerAngles

ios - jpg 文件在 chrome 中显示,但在 safari 中不显示

ios - 自定义底部栏过渡到 Swift 中的另一个 View ?

fonts - 如何在 Monotouch 中创建字体?