Xamarin SFSafariViewController DidFinish 未调用

Posted

技术标签:

【中文标题】Xamarin SFSafariViewController DidFinish 未调用【英文标题】:Xamarin SFSafariViewController DidFinish not called 【发布时间】:2018-10-11 08:26:26 【问题描述】:

我正在尝试使用 SFSafariViewController,这仅适用于 gr8。浏览器打开并加载我的网站。问题是当用户单击“完成”按钮时,我无法捕捉到该事件。我正在实施 ISFSafariViewControllerDelegate 并按照 API 的建议导出 DidFinish 方法。这是代码示例。

这个方法是从 ViewModel 中调用的。

public async Task LaunchSafariWebViewAsync(string url, Action action)

    var destination = new NSUrl(url);
    var sfViewController = new SFSafariViewController(destination);

    var window = UIApplication.SharedApplication.KeyWindow;
    var controller = window.RootViewController;
    await controller.PresentViewControllerAsync(sfViewController, true);

    //Note that I'm able to invoke method manualy with this call
    SFSafariViewControllerDelegate_Extensions.DidFinish(this, sfViewController);


然后在这里我导出我想要在用户关闭视图时调用的方法。

[Foundation.Export("safariViewControllerDidFinish:")]
public void DidFinish(SFSafariViewController controller)

    var temp = "test";

正如我在评论中所说,当我使用 SFSafariViewControllerDelegate_Extensions 时,我可以手动调用该方法,所以我猜它会正确导出。但是当我点击“完成”按钮时它不会被调用。

有什么建议吗?

【问题讨论】:

【参考方案1】:

从您的代码看来,您没有设置委托。

如果你在这个viewmodel中实现了DidFinish方法,在你初始化SFSafariViewController之后添加代码:

public async Task LaunchSafariWebViewAsync(string url, Action action)

    var destination = new NSUrl(url);
    var sfViewController = new SFSafariViewController(destination);

    sfViewController.weakDelegate=this;

    var window = UIApplication.SharedApplication.KeyWindow;
    var controller = window.RootViewController;
    await controller.PresentViewControllerAsync(sfViewController, true);

【讨论】:

感谢卢卡斯,成功了。

以上是关于Xamarin SFSafariViewController DidFinish 未调用的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin.forms(或)xamarin.ios/xamarin.android(或)本机

Xamarin挖墙脚系列:Xamarin的核心

Xamarin.Forms 和 Xamarin Native 有啥区别? [关闭]

Xamarin SQLite教程Xamarin.iOS项目添加引用

新的 Xamarin 项目不使用最新的 Xamarin 版本

当 Xamarin.ios Uitest 从 Xamarin Studio 运行时,在 Xamarin 测试云上面临“停滞的错误”