Iphone 防止tabbar更改特定索引处的选项卡-IOS
谢谢你阅读我的问题 我试图在用户单击索引为4的选项卡时实现一个弹出菜单。所以我试图阻止选项卡栏在按下索引4时切换viewcontroller 这是我的密码: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
- (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
}
}