Xamarin формы: как получить доступ к "tabBarController: shouldSelectViewController:" - PullRequest
1 голос
/ 22 октября 2019

Мне нужно контролировать этот метод, чтобы я мог внести изменения в свое приложение. Но я не смог заставить эту реализацию работать, кто-нибудь может помочь?

Вот пользовательский рендерер моего TabbedPage:

public class MainTabbedPageRenderer : TabbedRenderer, IUITabBarControllerDelegate
{
     [Export("tabBarController:shouldSelectViewController:")]
     public bool ShouldSelectViewController(UITabBarController tabBarController, UIViewController viewController)
     {
          return false;
     }
}

Точка останова на этом не останавливается вообще.

У меня сложилось впечатление, что он не останавливается в точке останова, потому что TabBarController всегда равен нулю, но экран загружается и выполняет навигацию в обычном режиме, я также не мог сделать этот TabBarController заполненным.

Вы можетенажмите на элементы панели вкладок, используя этот метод:

[Export("tabBar:didSelectItem:")]
public void ItemSelected(UITabBar tabbar, UITabBarItem item)
{
}

1 Ответ

2 голосов
/ 22 октября 2019

Я не вижу, куда вы назначаете своего делегата. Вероятно, поэтому он не ударил, вы не назначили делегата для UITabBarController (который является базовым классом для TabbedRenderer). Также TabbedRenderer уже назначает делегата, так что вы, вероятно, не хотите его заменять.

Тем не менее, Xamarin.iOS фактически определяет C # делегат , называемый UITabBarSelection, для метода протокола ShouldSelectViewController. И на TabbedRenderer есть свойство, называемое ShouldSelectViewController, которое позволяет вам установить этот метод делегата, поэтому вы можете просто сделать это:

public class MainTabbedPageRenderer : TabbedRenderer
{
    protected override void OnElementChanged(VisualElementChangedEventArgs e)
    {
        base.OnElementChanged(e);

        if (e.NewElement != null)
          this.ShouldSelectViewController = ShouldSelectViewControllerHandler;
    }

    bool ShouldSelectViewControllerHandler(UITabBarController tabBarController, UIViewController viewController)
    {
        return false;
    }
}
...