如何从 UITabBarItem 获取 RootViewController
How to get the RootViewController from a UITabBarItem
我什至不确定标题是否正确,但我不明白还能如何解释它,所以就到这里吧。我将逐步向您展示我的操作,以便您理解。
首先,我正在使用 UITabBarController,其中我得到了三个不同的项目。
1) 应用程序启动,它向我展示了第一个项目,它是一个 UITableView
2) 我单击一个单元格,它会将我推向该单元格的详细视图。
3) 我从那里导航到另一个 TabBarItem
4) 我导航回第一个 TabBarItem,它仍然显示第 3 步中的视图)。我不希望我希望它显示第 1 步的第一个视图)
我怎样才能做到这一点?
假设您已经在 AppDelegate 中设置了标签栏控制器,您希望将其设为您的 <UITabBarControllerDelegate>
并且在您的 AppDelegate.m 中,您想像这样实现此方法:
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
if ([viewController isKindOfClass:[UINavigationController class]]) {
[(UINavigationController*)viewController popToRootViewControllerAnimated:YES];
}
}
您可以实现 UITabBarController
委托方法:
- (void)tabBarController:(UITabBarController *)tabBarController
didSelectViewController:(UIViewController *)viewController
这会让您知道何时选择了选项卡。
然后您可以访问 UITabBar
的 UIViewController
,如果您没有对 UIViewController
的引用:
@property(nonatomic, copy) NSArray *viewControllers
从中获取要重置并调用的适当 UIViewController
(或 UITableViewController
)的引用:
- (NSArray *)popToRootViewControllerAnimated:(BOOL)animated
在UINavigationController
。或者为该调用创建一个 public 方法作为调用 popToRootViewController
的方式。
编辑:
您的 AppDelegate 应如下所示:
@interface AppDelegate () <UITabBarControllerDelegate>
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController;
tabBarController.delegate = self;
return YES;
}
- (void)tabBarController:(UITabBarController *)tabBarController
didSelectViewController:(UIViewController *)viewController {
NSLog(@"was selecated");
}
我什至不确定标题是否正确,但我不明白还能如何解释它,所以就到这里吧。我将逐步向您展示我的操作,以便您理解。
首先,我正在使用 UITabBarController,其中我得到了三个不同的项目。
1) 应用程序启动,它向我展示了第一个项目,它是一个 UITableView
2) 我单击一个单元格,它会将我推向该单元格的详细视图。
3) 我从那里导航到另一个 TabBarItem
4) 我导航回第一个 TabBarItem,它仍然显示第 3 步中的视图)。我不希望我希望它显示第 1 步的第一个视图)
我怎样才能做到这一点?
假设您已经在 AppDelegate 中设置了标签栏控制器,您希望将其设为您的 <UITabBarControllerDelegate>
并且在您的 AppDelegate.m 中,您想像这样实现此方法:
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
if ([viewController isKindOfClass:[UINavigationController class]]) {
[(UINavigationController*)viewController popToRootViewControllerAnimated:YES];
}
}
您可以实现 UITabBarController
委托方法:
- (void)tabBarController:(UITabBarController *)tabBarController
didSelectViewController:(UIViewController *)viewController
这会让您知道何时选择了选项卡。
然后您可以访问 UITabBar
的 UIViewController
,如果您没有对 UIViewController
的引用:
@property(nonatomic, copy) NSArray *viewControllers
从中获取要重置并调用的适当 UIViewController
(或 UITableViewController
)的引用:
- (NSArray *)popToRootViewControllerAnimated:(BOOL)animated
在UINavigationController
。或者为该调用创建一个 public 方法作为调用 popToRootViewController
的方式。
编辑:
您的 AppDelegate 应如下所示:
@interface AppDelegate () <UITabBarControllerDelegate>
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController;
tabBarController.delegate = self;
return YES;
}
- (void)tabBarController:(UITabBarController *)tabBarController
didSelectViewController:(UIViewController *)viewController {
NSLog(@"was selecated");
}