我创建了以下故事板:
- 导航控制器
- 登录视图控制器
- 选项卡控制器
- 导航控制器
- 搜索视图控制器
- 结果视图控制器
- 细节视图控制器
- 导航控制器
- 高级搜索视图控制器
- 结果视图控制器
- 细节视图控制器
当用户点击标签栏按钮时,我想确保他们看到的视图是搜索(如果他们点击了搜索)或高级搜索(如果他们点击了高级),而不是他们之前可能在堆栈中的点给定的标签。换句话说,我想让它们从顶部/根视图开始
我已将选项卡栏的委托设置为一个类并将 didSelectViewController 实现为:
标签栏控制器.h
#import <UIKit /UIKit.h>
@interface TabController : UITabBarController <UITabBarControllerDelegate>
@end
标签栏控制器.m
- (void) viewDidLoad
{
[super viewDidLoad];
self.delegate = self;
}
- (void) tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
{
[viewController.navigationController popToRootViewControllerAnimated:YES];
}
在搜索和高级搜索控制器 .m
- (void) viewWillAppear
{
[super viewWillAppear:animated];
//Hide the nav bar at the search/advanced controller level. Will be shown at results and detail levels
[[self navigationController] setNavigationBarHidden:YES animated:YES];
//Set the text for the back button
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle: @"title" style: UIBarButtonItemStyleBordered target: nil action: nil];
[self.navigationItem setBackBarButtonItem: backButton];
}
结果是当用户点击“高级搜索”按钮时,除了黑屏之外什么都没有出现。注释掉该代码并正确显示高级搜索。
请注意,搜索和高级搜索都重复使用了结果和详细信息控制器。
有任何想法吗?谢谢你的帮助。如果我一直用头撞墙,我就不用买万圣节服装了!