【发布时间】: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 中实现了UITabBarControllerDelegate 和self.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