iphone - 防止标签栏更改特定索引处的标签 - IOS

标签 iphone ios objective-c uitabbarcontroller uitabbaritem

感谢阅读我的问题。

当用户单击索引为 4 的选项卡时,我试图实现一个弹出菜单。因此,我试图阻止标签栏在按下索引 4 时切换 View Controller 。

这是我的代码:

- (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 选项卡时,菜单会显示并且选项卡栏不会切换 View (很棒),但是当我再次单击它时,即使我收到日志“NO”, View 也会发生变化. 这里可能是什么问题?

感谢您的任何建议!

已解决

感谢 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;
    }

}

最佳答案

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

对于 Swift 3.0

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

然后在你的 Controller 中覆盖这个委托(delegate)

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

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

关于iphone - 防止标签栏更改特定索引处的标签 - IOS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16786556/

相关文章:

objective-c - 打开文件对话框

ios - Splash 完成后更改 ViewController

iphone - 容器类的内存管理

android - App vs Mobile Website 这个问题让我很头疼

iphone - 苹果不接受使用某些版本的SDK构建的应用程序

ios - UITableView 清除背景

iphone - 在iphone的webview中打开下载的文件

objective-c - Objective-C 类别和扩展的细节

iOS Xcode 开发构建,在什么情况下部署在设备上的构建会失效?

ios - UIAlertView Action 没有 swift 发生