未调用 Xamarin SFSafariViewController DidFinish
Xamarin SFSafariViewController DidFinish not called
我正在尝试使用 SFSafariViewController,这只适用于 gr8。浏览器打开并加载我的网站。问题是当用户单击 'Done' 按钮时我无法捕获事件。我正在实施 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 时,我可以手动调用该方法,所以我猜它可以正确导出。但是当我点击 'Done' 按钮时它没有被调用。
有什么建议吗?
从您的代码看来您没有设置委托。
如果您在此视图模型中实现方法 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);
}
我正在尝试使用 SFSafariViewController,这只适用于 gr8。浏览器打开并加载我的网站。问题是当用户单击 'Done' 按钮时我无法捕获事件。我正在实施 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 时,我可以手动调用该方法,所以我猜它可以正确导出。但是当我点击 'Done' 按钮时它没有被调用。
有什么建议吗?
从您的代码看来您没有设置委托。
如果您在此视图模型中实现方法 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);
}