Xamarin SFSafariViewController DidFinish未调用

时间:2018-10-11 08:26:26

标签: c# xamarin.ios sfsafariviewcontroller sfsafariviewcontrollerdelegate

我正在尝试使用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 个答案:

答案 0 :(得分:1)

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

如果您在此视图模型中实现方法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);
}