ios / objective-c:检测tabbarbutton按下的事件

时间:2017-01-13 18:30:00

标签: ios uitabbarcontroller

我想阻止用户通过标签栏栏按钮访问某些视图控制器,而是要求他们使用警报登录。我可以禁用按钮,但是,在禁用的标签栏按钮上检测按钮的唯一方法(为了触发警报)似乎是将按钮嵌入另一个带有手势识别器的视图中,这似乎很复杂。

或者,如果我启用按钮,按下它们会启动分配给它们的视图控制器,无法启动警报。

有没有办法检测印刷机并抢占segue到视图控制器,以便我可以发出警报?

我已尝试在我的app委托和各个视图控制器的viewdidload中使用以下方法(订阅uitabbarcontroller委托协议),但它没有被触发。

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

    NSUInteger indexOfTab = [theTabBarController.viewControllers indexOfObject:viewController];
    NSLog(@"Tab index pressed = %lu", (unsigned long)indexOfTab);
    //launch alert
//prevent segue to view controller
}

1 个答案:

答案 0 :(得分:0)

您必须在UITabBarController中实施的方法是:

- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController

如果用户已登录,则返回YES,如果不是,则显示警报并返回NO。您可以通过比较viewController和您希望用户登录的那个来检查按下了哪个项目。

您不必在订阅UITabBarController委托协议的控制器中实现此方法,但要在UITabBarController的子类中实现它。