Xamarin 表单:如何访问 "tabBarController: shouldSelectViewController:"

Xamarin forms: How to access "tabBarController: shouldSelectViewController:"

我需要控制此方法,以便我可以在我的应用程序中进行更改。但是我无法使这个实现工作,有人可以帮忙吗?

这是我的 TabbedPage 的自定义渲染器:

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

断点根本不止于此。

我的印象是它不会在断点处停止,因为 TabBarController 始终为 null,但屏幕加载和执行导航正常,我也无法填充此 TabBarController。

您可以使用此方法点击标签栏项目:

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

我没看到你在哪里分配你的代表。这可能就是它未被命中的原因,您尚未将委托分配给 UITabBarController(这是 TabbedRenderer 的基础 class)。此外 TabbedRenderer 已经分配了一个委托,因此您可能不想替换它。

也就是说,Xamarin.iOS实际上为ShouldSelectViewController协议方法定义了一个C# delegate,叫做UITabBarSelectionTabbedRenderer 上有一个名为 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;
    }
}