Xamarin SFSafariViewController DidFinish не вызывается
Я пытаюсь использовать SFSafariViewController, и это работает просто gr8. Браузер открывает и загружает мой сайт. Проблема в том, что я не могу поймать событие, когда пользователь нажимает кнопку "Готово". Я реализую ISFSafariViewControllerDelegate и экспортирую метод DidFinish, как подсказывает API. Вот пример кода.
Этот метод вызывается из 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 ответ
Из вашего кода похоже, что вы не установили делегата.
Если вы реализуете метод 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);
}