tabBar:didSelectItem 和 popToRootViewControllerAnimated
tabBar:didSelectItem and popToRootViewControllerAnimated
我有一个 UITabBarController
,其中包含几个 UINavigationController
。当您单击选项卡栏项目时,我希望它将用户导航回该导航控制器的根视图控制器。我有以下代码,它适用于 iPad2、iPhone4、iPhone5,但不适用于 iPhone5。有谁知道为什么会这样?
Update:如果我将 afterDelay
更改为 .8
那么它将起作用,但会在更改视图时创建一个 flash - 不是很理想!
@implementation NavigationTabs
- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item {
// Thanks to
if ([self.selectedViewController isKindOfClass:[UINavigationController class]]) {
UINavigationController * view = (UINavigationController *)self.selectedViewController;
[view performSelector:@selector(popToRootViewControllerAnimated:) withObject:nil afterDelay:.5];
}
}
@end
更新:工作代码如下:
@interface NavigationTabs : UITabBarController <UITabBarControllerDelegate>
@end
@implementation NavigationTabs
- (void)viewDidLoad {
self.delegate = self;
}
- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController {
if ([viewController isKindOfClass:[UINavigationController class]]) {
[(UINavigationController *)viewController popToRootViewControllerAnimated:NO];
}
return YES;
}
@end
这样做可以避免闪烁,
每次您从选项卡 A 导航到选项卡 B 时,在您调用
[self.tabBarController setSelectedIndex:<index of tab>];
在选项卡栏上,调用选项卡 A 上的 popToRootViewControllerAnimated:
。
这样,一旦您导航回选项卡 A,就不必将其弹出到根目录 viewController,它已经在根目录中了。
如果您不通过代码更改选项卡,那么您可以注册以从 UITabBarControllerDelegate
获取委托方法
您可以实施
- (BOOL)tabBarController:(UITabBarController *)tabBarController
shouldSelectViewController:(UIViewController *)viewController
获得关于 viewController 被按下的通知
我有一个 UITabBarController
,其中包含几个 UINavigationController
。当您单击选项卡栏项目时,我希望它将用户导航回该导航控制器的根视图控制器。我有以下代码,它适用于 iPad2、iPhone4、iPhone5,但不适用于 iPhone5。有谁知道为什么会这样?
Update:如果我将 afterDelay
更改为 .8
那么它将起作用,但会在更改视图时创建一个 flash - 不是很理想!
@implementation NavigationTabs
- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item {
// Thanks to
if ([self.selectedViewController isKindOfClass:[UINavigationController class]]) {
UINavigationController * view = (UINavigationController *)self.selectedViewController;
[view performSelector:@selector(popToRootViewControllerAnimated:) withObject:nil afterDelay:.5];
}
}
@end
更新:工作代码如下:
@interface NavigationTabs : UITabBarController <UITabBarControllerDelegate>
@end
@implementation NavigationTabs
- (void)viewDidLoad {
self.delegate = self;
}
- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController {
if ([viewController isKindOfClass:[UINavigationController class]]) {
[(UINavigationController *)viewController popToRootViewControllerAnimated:NO];
}
return YES;
}
@end
这样做可以避免闪烁,
每次您从选项卡 A 导航到选项卡 B 时,在您调用
[self.tabBarController setSelectedIndex:<index of tab>];
在选项卡栏上,调用选项卡 A 上的 popToRootViewControllerAnimated:
。
这样,一旦您导航回选项卡 A,就不必将其弹出到根目录 viewController,它已经在根目录中了。
如果您不通过代码更改选项卡,那么您可以注册以从 UITabBarControllerDelegate
您可以实施
- (BOOL)tabBarController:(UITabBarController *)tabBarController
shouldSelectViewController:(UIViewController *)viewController
获得关于 viewController 被按下的通知