Iphone Can';无法将tabbar应用程序添加到popToRootViewController

Iphone Can';无法将tabbar应用程序添加到popToRootViewController,iphone,ios,xcode,uinavigationcontroller,uitabbarcontroller,Iphone,Ios,Xcode,Uinavigationcontroller,Uitabbarcontroller,我有一个带有导航栏和横幅视图代理的程序化tabbar delagate。对于我来说,我似乎无法让选项卡在单击时弹出根视图。我知道我需要使用类似于[self.navigationController popToRootViewControllerAnimated:NO]的东西;但我不知道该把它放在我的应用程序中 @implementation AppDelegate { UITabBarController *_tabBarController; } - (BOOL)applicatio

我有一个带有导航栏和横幅视图代理的程序化tabbar delagate。对于我来说,我似乎无法让选项卡在单击时弹出根视图。我知道我需要使用类似于[self.navigationController popToRootViewControllerAnimated:NO]的东西;但我不知道该把它放在我的应用程序中

@implementation AppDelegate {
UITabBarController *_tabBarController;
  }


 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:      (NSDictionary *)launchOptions
{
NSError *setCategoryError = nil;

CGRect bounds = [[UIScreen mainScreen] bounds];
self.window = [[UIWindow alloc] initWithFrame:bounds];
self.window.backgroundColor = [UIColor whiteColor];

NSMutableArray * viewControllers = [[NSMutableArray alloc] init];

NSString * subscriptionListFile = [[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent:@"Subscription.plist"];

NSDictionary * subscriptionList = [[NSDictionary alloc] initWithContentsOfFile:subscriptionListFile];

NSArray * subscriptionFolders = subscriptionList[@"Folders"];

NewsListViewController * newsController = nil;
UINavigationController * newsNavigationController = nil;
BannerViewController * bannervcs = nil;

for (NSDictionary * folderDetails in subscriptionFolders) {

    NSArray * newsItems = folderDetails[@"Items"];
    NSString * folderTitle = folderDetails[@"FolderName"];
    NSString * folderIcon = folderDetails[@"FolderIcon"];
    UIImage * folderIconImage = [UIImage imageNamed:folderIcon];

    newsController = [[NewsListViewController alloc] initWithNewsSourceList:newsItems];
    [newsController setTitle:folderTitle];

    newsNavigationController = [[UINavigationController alloc] initWithRootViewController:newsController];
    [newsNavigationController setTitle:folderTitle];

    bannervcs = [[BannerViewController alloc] initWithContentViewController:newsNavigationController];
    [bannervcs.tabBarItem setImage:folderIconImage];
    [viewControllers addObject:bannervcs];

  }


_tabBarController = [[UITabBarController alloc] init];
_tabBarController.viewControllers = viewControllers;

   self.window.rootViewController = _tabBarController;
   [self.window makeKeyAndVisible];

    return YES;
}



 @end

知道我在哪里添加popToRootViewController吗?我在最后尝试过,但它似乎没有抓取任何控制器…

您需要设置一些东西作为您的UIDABBARCONTROLLERDELEGATE。假设要在AppDelegate上尝试此操作,请将该行添加到方法中:

_tabBarConroller.delegate = self;
然后,将此方法添加到您的AppDelegate(因为它现在也被视为UITabBarControllerDelegate)


这是假设,无论用户将导航堆栈保留在选项卡上的状态如何,点击另一个选项卡始终会将用户带到导航堆栈的根视图控制器。

如果希望在选项卡栏中使用navigationController,则必须添加navigationController而不是viewController。 因此,在您的情况下,您没有将NavigationController添加到TabbarController数组中

[viewControllers addObject:bannervcs]; 
因此,不要添加
bannervcs
add
newsNavigationController

[viewControllers addObject:newsNavigationController];  

有关更多信息,请阅读并从

中获取示例代码。是的,不转到顶层。我应该能够单击选项卡项,它应该转到该vc的根视图,但它没有。。。是bannerview delagate(ios 5.0 vc容器)还是tabbar代理搞错了?就在弹出的nslog显示viewController为bannerview控制器,viewController.navigationController为空之前。我必须将pop放入for tabitem循环中吗?或者以某种方式更改bannerview中的delagate?尝试在bannerview控制器上调用PoptorootView控制器。这也不起作用,我不知道如何访问代理导航栏。我想下面是我想要的,但我不知道如何让它工作。。。MyAppDelegate*appDelegate=(MyAppDelegate*)[[UIApplication sharedApplication]。委托;UINavigationController*navController=[appDelegate.tabBarController.viewControllers objectAtIndex:indexOfNavController];[navController popToRootViewController:否];I duno,Ima noob and Troughting:/这是nslogs,找不到导航并弹出它,或者如何通过我的appdelagate逐步向下钻取:/ViewController=BannerViewController:tabBarController=UITabBarController:tabbarcontrollerervicewcontroller=(“BannerViewController:0x867f450”,“BannerViewController:0x83c58d0”,“BannerViewController:0x83c7b40”、“BannerViewController:0x83c9c90”)导航控制器=(空)您在tabBarController中添加导航控制器的位置?我的设置是一个tabBarController,带有容器BannerViewController,带有Nav,带有TableView。Nav是在VC包装到banner之前添加的,因此如果您登录viewController,它会返回BannerViewController(1-4),我需要一种方法将所选容器控制器内的导航栏转到PoptRoot。我下面的代码只能看到BannerView,而不能看到子导航视图。什么是NewsListViewController??Newslist是一个表视图,newsnav是一个导航,bannervcs是一个标题容器,tabbar是一个选项卡栏。newsnav是不可访问的,因为它被包装在横幅vc.Soo…wr中将表格放在横幅中,并将横幅/表格包装在导航栏中?将导航栏放在横幅的顶部,而不是横幅的内部?首先告诉我问题的流程……什么是NewsListViewController?什么是BannerViewController?问题是我的tabbar不会像tabbar应用程序一样在单击时弹出到根导航栏。我有一个表格视图(newscontroller),包装在Nav(newsnavcontroller)中,包装在iAd套件容器控制器(bannervcs)中,包装在选项卡栏中。问题是,iAd必须包装导航/表格以保持广告在顶部。因此,选项卡栏看到的是横幅容器,而不是导航容器…如果我将表格包装在横幅中而不是导航中,则广告不会停留在顶部。好吧,暂时忘记导航…我只想让该死的选项卡栏在每次单击选项卡栏时重新加载VC。如果VC数组中满是横幅VC容器,我该怎么做?您在哪里使用[self.navigationcontroller pushviewController:…]
[viewControllers addObject:newsNavigationController];