Iphone 防止tabbar更改特定索引处的选项卡-IOS

Iphone 防止tabbar更改特定索引处的选项卡-IOS,iphone,ios,objective-c,uitabbarcontroller,uitabbaritem,Iphone,Ios,Objective C,Uitabbarcontroller,Uitabbaritem,谢谢你阅读我的问题 我试图在用户单击索引为4的选项卡时实现一个弹出菜单。所以我试图阻止选项卡栏在按下索引4时切换viewcontroller 这是我的密码: - (BOOL) tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController { if(viewController == [tabBarController

谢谢你阅读我的问题

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

这是我的密码:

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

}
我已经实现了
uitabarcontrollerdelegate
self.delegate=self
viewDidLoad
中,它只工作一次

当我单击index 4选项卡时,菜单会显示,选项卡栏不会切换视图(很好),但当我再次单击它时,即使我得到日志“否”,视图也会更改。 这里有什么问题

谢谢你的建议

已解决

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

确保您已实施uitabarcontrollerdelegate,并将uitabarcontroller委托设置为self

然后在控制器中重写此委托

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

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

为什么不在第四个选项卡上只使用空的ViewController?为视图控制器的ViewDidDisplay/ViewWillDisplay方法添加一个断点。根据文件,此方法称为“无需考虑所选视图控制器是否更改”。@教授:第四个选项卡的
空视图控制器是什么意思?
@PaperThick:为什么在
if
条件下使用
ViewController
而不是使用
selectedIndex
?如果再次点击?此处selectedindex指的是选项卡栏项目的索引,因此第一个项目的索引将始终是一个。在上面的花瓶中,我刚刚给出了一个示例,并向该人员说明了如何使用以及所选索引的用途。谢谢您,该工作了。如果您确保正在实现,我会在上面发布我的最终代码UITabBarControllerDelegate和设置UITabbarController的delegate=self。即使设置delegate=self,它也不起作用。有什么帮助吗?@MuhammadUmairGillani您必须将其设置为self.delegate=self
func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {

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