0

バナービューのデリゲートを持つnavbarを備えたプログラムによるタブバーのデリゲートがあります。そして、私の人生では、タブをクリックしてルートビューをポップすることができないようです。[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 をどこに追加するか考えていますか? 最後に試してみましたが、コントローラーを取得していないようです...

4

2 に答える 2

0

tabBar に navigationController が必要な場合は、viewController の代わりに yourNavigationController を追加する必要があります。したがって、あなたの場合、navigationControllers を tabBarControllers 配列に追加していません。

[viewControllers addObject:bannervcs]; 

bannervcs追加する代わりにnewsNavigationController

[viewControllers addObject:newsNavigationController];  

詳細については、UITabBarController クラス リファレンスからサンプル コードを読んで取得してください。

于 2012-12-10T07:27:21.437 に答える
0

UITabBarControllerDelegate になるように何かを設定する必要があります。AppDelegate でこれを試したいと仮定すると、次の行をメソッドに追加します。

_tabBarConroller.delegate = self;

次に、このメソッドを AppDelegate に追加します (現在は UITabBarControllerDelegate とも見なされるため)。

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

これは、ユーザーがタブのナビゲーション スタックを離れた状態に関係なく、別のタブをタップすると、常にユーザーがナビゲーション スタックのルート ビュー コントローラーに移動することを前提としています。

于 2012-12-08T18:28:40.830 に答える