首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SFSafariViewController DidFinish未调用

SFSafariViewController DidFinish未调用
EN

Stack Overflow用户
提问于 2018-10-11 08:26:26
回答 1查看 1.1K关注 0票数 1

我正在尝试使用SFSafariViewController,而这只使用gr8。浏览器打开并加载我的站点。问题是,当用户单击“Done”按钮时,我无法捕捉事件。正如API所建议的那样,我正在执行ISFSafariViewControllerDelegate并导出DidFinish方法。这是代码示例。

此方法是从ViewModel调用的。

代码语言:javascript
复制
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);

}

然后在这里导出希望在用户关闭视图时被调用的方法。

代码语言:javascript
复制
[Foundation.Export("safariViewControllerDidFinish:")]
public void DidFinish(SFSafariViewController controller)
{
    var temp = "test";
}

正如我在注释中指出的那样,当我使用SFSafariViewControllerDelegate_Extensions时,我能够手动调用该方法,因此我猜它是正确导出的。但是,当我单击“完成”按钮时,它不会被调用。

有什么建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-12 04:54:29

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

如果在此视图模型中实现方法DidFinish,则在插入SFSafariViewController后添加代码:

代码语言:javascript
复制
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);
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52755533

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档