我正在尝试使用SFSafariViewController,而这只使用gr8。浏览器打开并加载我的站点。问题是,当用户单击“Done”按钮时,我无法捕捉事件。正如API所建议的那样,我正在执行ISFSafariViewControllerDelegate并导出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时,我能够手动调用该方法,因此我猜它是正确导出的。但是,当我单击“完成”按钮时,它不会被调用。
有什么建议吗?
发布于 2018-10-12 04:54:29
从您的代码来看,您似乎没有设置委托。
如果在此视图模型中实现方法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);
}https://stackoverflow.com/questions/52755533
复制相似问题