【问题标题】:Prevent tabbar from changing tab at specific index - IOS防止标签栏在特定索引处更改标签 - IOS
【发布时间】:2013-05-23 02:24:03
【问题描述】:

感谢您阅读我的问题。

当用户单击索引为 4 的选项卡时,我试图实现一个弹出菜单。所以我试图阻止选项卡栏在按下索引 4 时切换视图控制器。

这是我的代码:

- (BOOL) tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController
{
    if(viewController == [tabBarController.viewControllers objectAtIndex:4]){        
        NSLog(@"NO");
        return NO;
    }else{
        NSLog(@"YES");
        return YES;
    }

}

我已经在viewDidLoad 中实现了UITabBarControllerDelegateself.delegate = self;,它可以工作,但只有一次。

当我单击索引 4 选项卡时,菜单会显示并且选项卡栏不会切换视图 (GREAT),但是当我再次单击它时,即使我收到日志“NO”,视图也会发生变化. 这里可能是什么问题?

感谢您的任何建议!

已解决

感谢 Kasaname 在下面的回答,我通过添加 selectedindex 并将其设置为标志索引(prevtab)来解决它。我将 prevtab 更改为最后选择的选项卡的索引,当用户选择索引 4 时除外。 我的最终代码:

- (BOOL) tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController
{
    if(viewController == [tabBarController.viewControllers objectAtIndex:4]){
        self.selectedIndex = prevTab; //only change in this method       
        return NO;
    }else{        
        return YES;
    }

}

【问题讨论】:

  • 为什么不使用空的 ViewController 作为第四个选项卡?
  • 在视图控制器的 viewDidAppear/viewWillAppear 方法中添加断点。根据文档,无论所选视图控制器是否更改,都会调用此方法。
  • @ProFFeSSoR:empty ViewController for the 4th tab? 是什么意思
  • @PaperThick:为什么在if 条件下使用viewController 而不是selectedIndex

标签: iphone ios objective-c uitabbarcontroller uitabbaritem


【解决方案1】:

这是您可以停止/防止标签栏项目在标签栏项目点击上切换标签的方法

对于 Swift 3.0

确保您已实现 UITabBarControllerDelegate 并将 UITabbarControllerdelegate 设置为 自我

然后在你的控制器中覆盖这个委托

func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {

    if viewController == tabBarController.viewControllers?[2] {
        return false
    } else {
        return true
    }
}

【讨论】:

  • 如果你确保你正在实现 UITabBarControllerDelegate 并设置 UITabbarController's delegate = self ,它会起作用。
  • 即使设置了 delegate = self 也没有任何帮助?
  • @MuhammadUmairGillani 您必须将其设置为 self.delegate = self
【解决方案2】:
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
    if (tabBarController.selectedIndex == 0) {

    } else if (tabBarController.selectedIndex == 1) {

    } else if (tabBarController.selectedIndex == 2) {

    }
}

你为什么不使用这个委托 使用这个委托我想它会起作用

【讨论】:

  • 如果再次点击selectedIndex 怎么可能是0?
  • 这里 selectedindex 是指标签栏项目的索引,因此第一个总是一个。
  • 在上面的花瓶中,我只是举了一个例子,它取决于人们如何使用以及选择的索引
  • 谢谢你应该可以找到我在上面发布我的最终代码
猜你喜欢
  • 2011-06-10
  • 2011-11-28
  • 2013-06-11
  • 1970-01-01
  • 2021-04-07
  • 1970-01-01
  • 1970-01-01
  • 2015-01-17
  • 2016-07-27
相关资源
最近更新 更多