2012-12-08 44 views
0

我有一個帶有橫幅視圖委託的導航欄的程序化tabbar delagate。而對於我的生活,我似乎無法讓標籤在點擊時彈出根視圖。我知道我需要使用像[self.navigationController popToRootViewControllerAnimated:NO];但我不知道把它放在我的應用程序委託中。不能讓tabbar應用程序popToRootViewController

@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?我在最後嘗試,但它似乎並沒有抓住任何控制器...

+0

採取樣本代碼你在哪裏你tabBarController加入您的導航控制器? – Rajneesh071

+0

我的設置是一個TabBarController,帶有容器BannerViewController,Nav和TableView。在VC被包裝在橫幅之前添加nav,所以如果你NSLOG viewController它返回BannerViewController(1-4),我需要一種方法來獲取所選容器控制器內的導航欄poptoroot。我的下面的代碼只能看到BannerView,而不是子導航視圖。 –

+0

什麼是NewsListViewController? – Rajneesh071

回答

0

你需要設置一些東西作爲你的UITabBarControllerDelegate。假設你想嘗試了這一點,在你的AppDelegate中,該行添加到您的方法:

_tabBarConroller.delegate = self; 

然後,此方法添加到您的AppDelegate(因爲它現在也被認爲是UITabBarControllerDelegate)

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController 
{ 
    viewController.navigationController popToRootViewControllerAnimated:NO]; 
} 

這是假設,無論用戶在某個選項卡上離開導航堆棧的狀態如何,點擊另一個選項卡始終將用戶導向到導航堆棧的根視圖控制器。

+0

是的,沒有達到頂級水平。我應該能夠點擊標籤項目,它應該轉到該vc的根視圖,但它不...是否bannerview delagate(ios 5.0 vc容器)或tabbar委託搞砸了? –

+0

就在pop nslog之前,說viewController是BannerViewController,而viewController.navigationController是null。我是否必須將pop放入tabitem循環中?或以某種方式改變bannerview的delagate? –

+0

嘗試在BannerViewController上調用popToRootViewController。 –

0

如果你想在你的tabBar導航控制器,那麼你必須添加您的導航控制器而不是viewController。 因此,在你的情況下,你沒有將navigationControllers添加到你的tabBarControllers數組中。

[viewControllers addObject:bannervcs]; 

因此,而不是增加bannervcs添加newsNavigationController

[viewControllers addObject:newsNavigationController]; 

欲瞭解更多信息,僅讀和從UITabBarController Class Reference

+0

Soo ....將表格包裝在橫幅中,並將橫幅/表格包裹在Nav中?將導航欄放在橫幅的頂部?而不是在橫幅內? –

+0

首先告訴我你的問題的流程....什麼是NewsListViewController?什麼是BannerViewController? – Rajneesh071

+0

問題是我的tabbar doesnt彈出到根導航點擊像一個tabbar應用應該。我有一個表格視圖(newscontroller),用Nav(newsnavcontroller)封裝,包裝在iAd suite容器控制器(bannervcs)中,幷包裝在標籤欄中。問題是,iAd必須包裝nav/table才能保持廣告在最前面。所以標籤欄會看到橫幅容器,而不是導航容器......如果我將表格包裝在橫幅而不是導航欄中,則廣告不會處於頂部。 –