c# - Xamarin 表单:如何访问“tabBarController:shouldSelectViewController:”
问题描述
我需要控制此方法,以便我可以在我的应用程序中进行更改。但是我无法使这个实现工作,有人可以帮忙吗?
这是我的 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)
{
}
解决方案
我没有看到你在哪里分配你的代表。这可能是它没有被命中的原因,您没有将委托分配给 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;
}
}