我有一个基于标签栏的应用程序。所有选项卡都有一个导航控制器作为根。
如果用户再次点击该选项卡(如果该选项卡处于活动状态),它将弹回到导航控制器。
我怎样才能阻止这种行为?
所以事实上我有一个导航控制器+一个隐藏的viewcontroller
做出一些决定+另一个视图控制器。对于原始问题中的误导性信息表示歉意。我用的是隐藏的viewcontroller
对于所有选项卡,其中 3 个,因为如果用户未登录,我在所有 3 个选项卡上都有登录屏幕。如果用户登录,那么我会弹出登录屏幕,然后将1,2,3
个人viewcontrollers
在每个选项卡上。
第一次点击:
0 : class=Crossing: 0x645c8a0>
1 : class=FavoritesViewController: 0x64ac140>
shouldSelectViewController : UINavigationController
UINavigationController topclass:FavoritesViewController
myTabBarController.selectedViewController :UINavigationController
did disappear
didSelectViewController : UINavigationController
UINavigationController topclass:FavoritesViewController
第二次点击:
0 : class=Crossing: 0x645c8a0>
1 : class=FavoritesViewController: 0x64ac140>
shouldSelectViewController : UINavigationController
UINavigationController topclass:FavoritesViewController
myTabBarController.selectedViewController :UINavigationController
didSelectViewController : UINavigationController
UINavigationController topclass:Crossing
@MarkGranoff 这样做是正确的,但这样做的方法是这样做:
- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController
{
if ([tabBarController.viewControllers indexOfObject:viewController] == tabBarController.selectedIndex)
{
return NO;
}
else
{
return YES;
}
}
或者以更简洁的方式:
- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController
{
return (viewController != tabBarController.selectedViewController);
}
如果您只想阻止某个选项卡的默认行为,那么您可以执行以下操作:
- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController
{
NSUInteger indexOfNewViewController = [tabBarController.viewControllers indexOfObject:viewController];
// Only the second tab shouldn't pop home
return ((indexOfNewViewController != 1) ||
(indexOfNewViewController != tabBarController.selectedIndex));
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)