【问题标题】:Where do I implement the UITabBarControllerDelegate?我在哪里实现 UITabBarController 委托?
【发布时间】:2020-05-28 21:05:53
【问题描述】:

我有一个以编程方式实现的tabBar。我希望能够跟踪用户是否按下某个 tabBar 项目(或按钮或任何它的名称)。据我了解,这是通过继承 UITabBarControllerDelegate 类来完成的。

如果我在 tabBar 项导航到的类之一中实现 UITabBarControllerDelegate 代码,则 didSelectViewController 方法有效:

@interface ExperiencesContainerViewController () <ContainerProtocol, UITabBarControllerDelegate>
@implementation ExperiencesContainerViewController

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {

    NSLog(@"PRESS");
}

- (void)viewDidLoad {
    [super viewDidLoad];

    self.tabBarController.delegate = self;

}

现在这个工作了,但它工作得有点太好了,因为它不仅会在我按下这个特定的 class 的项目时触发,而且我碰巧按下的任何项目都会触发,即使这些项目导航到一个完全不同的类。

我希望method 仅在我按下该特定类的tabBar 项时触发。然后我想我也会在另一个classes 中复制这种模式,并且只有在按下它们各自的tabBar 项目时才会触发这些方法。

我读到了:

Detect when a tab bar item is pressed

答案表明我应该在处理tabBar 设置的class 中实现UITabBarControllerDelegate。我试过了,但没有触发method。我认为这与 delegate 突然被设置为与 tabBar 项目之一无关的 class 有关。

如果您需要其他信息或需要查看更多代码,请告诉我。

【问题讨论】:

    标签: ios objective-c uitabbarcontroller uitabbar uitabbaritem


    【解决方案1】:

    我相信您已经发布的链接适合您的answers。

    您需要使处理tabBar 的设置和显示的类实现UITabBarDelegate,不 UITabBarControllerDelegate。然后,您可以使用正确的委托方法来检索 tabBar 的某个项目被单击并检查它是否是您感兴趣的项目。

    你要的方法是tabBar:didSelectItem: (当用户选择标签栏项目时发送给委托人)。

    更多信息here。

    【讨论】:

      猜你喜欢
      • 2020-01-04
      • 1970-01-01
      • 2013-08-22
      • 1970-01-01
      • 1970-01-01
      • 2012-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多