popToRootController无法正常工作

时间:2012-10-17 15:26:24

标签: iphone objective-c ios cocoa-touch

我创建了以下故事板:

  
      
  • 导航控制器   
        
    • 登录视图控制器   
          
      • 标签控制器
      •   
      • 导航控制器   
            
        • 搜索视图控制器   
              
          • 结果视图控制器   
                
            • 详情视图控制器
            •   
          •   
        •   
      •   
      • 导航控制器   
            
        • 高级搜索视图控制器   
              
          • 结果视图控制器   
                
            • 详情视图控制器
            •   
          •   
        •   
      •   
    •   
  •   

当用户点击标签栏按钮时,我想确保他们看到的视图是搜索(如果他们点击了搜索)或高级搜索(如果他们点击了高级),而不是他们之前可能已经在堆栈中的点在给定选项卡上。换句话说,我想让他们从顶部/根视图开始

我已将标签栏的委托设置为一个类,并将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];
}

结果是,当用户点击“高级搜索”按钮时,除了黑屏外什么都不会显示。注释掉代码和高级搜索是否正确显示。

请注意,结果和细节控制器可以重复用于搜索和高级搜索。

有什么想法吗?谢谢你的帮助。如果我不停地撞到这堵墙,我就不用买万圣节服装了!

1 个答案:

答案 0 :(得分:1)

我有同样的问题。我已经使用了这段代码,但它确实有效。[(UINavigationController *)viewController popToRootViewControllerAnimated:NO];