Xamarin SFSafariViewController DidFinish не вызывается - PullRequest
0 голосов
/ 11 октября 2018

Я пытаюсь использовать 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 Ответ

0 голосов
/ 12 октября 2018

Из вашего кода похоже, что вы не установили делегата.

Если вы реализуете метод 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);
}
...