4

私はUINavigationControllers自分のアプリケーションで扱っており、すべてによって処理されますUITabBarController。コントローラーが自動生成された「その他」タブに入るまで、すべて正常に動作します。

単純化した例で問題を再現しました。私は何か間違ったことをしていますか?わかりません。

ご協力いただきありがとうございます。

#import <UIKit/UIKit.h>

@interface testAppDelegate : NSObject <UIApplicationDelegate, UITabBarControllerDelegate>
{
    UIWindow *ウィンドウ;
    UITabBarController *tabBarController;
}
@property (非アトミック、保持) IBOutlet UIWindow *window;
@property (非アトミック、保持) IBOutlet UITabBarController *tabBarController;
@終わり

@implementation testAppDelegate
@synthesize ウィンドウ、tabBarController;

- (void)applicationDidFinishLaunching:(UIApplication *)アプリケーション
{
    tabBarController = [[UITabBarController alloc] initWithNibName:nil bundle:nil];

    UINavigationController *ctrl1 = [[[UINavigationController alloc] initWithNibName:nil bundle: nil] autorelease];
    ctrl1.tabBarItem = [[[UITabBarItem alloc] initWithTabBarSystemItem:UITabBarSystemItemFeatured タグ:1] autorelease];

    UINavigationController *ctrl2 = [[[UINavigationController alloc] initWithNibName:nil bundle: nil] autorelease];
    ctrl2.tabBarItem = [[[UITabBarItem alloc] initWithTabBarSystemItem:UITabBarSystemItemFavorites タグ:2] autorelease];

    UINavigationController *ctrl3 = [[[UINavigationController alloc] initWithNibName:nil bundle: nil] autorelease];
    ctrl3.tabBarItem = [[[UITabBarItem alloc] initWithTabBarSystemItem:UITabBarSystemItemBookmarks タグ:3] autorelease];

    UINavigationController *ctrl4 = [[[UINavigationController alloc] initWithNibName:nil bundle: nil] autorelease];
    ctrl4.tabBarItem = [[[UITabBarItem alloc] initWithTabBarSystemItem:UITabBarSystemItemContacts タグ:4] autorelease];

    // これは機能しません
    UINavigationController *ctrl5 = [[[UINavigationController alloc] initWithNibName:nil bundle: nil] autorelease];
    ctrl5.tabBarItem = [[[UITabBarItem alloc] initWithTabBarSystemItem:UITabBarSystemItemMostRecent タグ:5] autorelease];

    // これは動作します
    UIViewController *ctrl6 = [[[UIViewController alloc] initWithNibName:nil bundle: nil] autorelease];
    ctrl6.tabBarItem = [[[UITabBarItem alloc] initWithTabBarSystemItem:UITabBarSystemItemDownloads タグ:6] autorelease];

    tabBarController.viewControllers = [NSArray arrayWithObjects:ctrl1, ctrl2, ctrl3, ctrl4, ctrl5, ctrl6, nil];

    [ウィンドウ addSubview:tabBarController.view];
    [ウィンドウ makeKeyAndVisible];
}

- (無効)dealloc
{
    [tabBarController リリース];
    [ウィンドウリリース];
    [スーパーdealloc];
}

@終わり
4

3 に答える 3

2

簡単な答え: ナビゲーション コントローラーをネストすることはできません

より長い答え:あなたはそれを間違っています。必要なものを作成するより良い方法は次のとおりです。

NSMutableArray *viewControllers = [NSMutableArray array];

[viewControllers addObject:[[[ConverterViewController alloc] init] autorelease]];
[viewControllers addObject:[[[UINavigationController alloc]
                             initWithRootViewController:[[[CurrencyViewController alloc] init] autorelease]] autorelease]];
[viewControllers addObject:[[[UINavigationController alloc]
                             initWithRootViewController:[[[HistoryViewController alloc] init] autorelease]] autorelease]];
[viewControllers addObject:[[[UINavigationController alloc]
                             initWithRootViewController:[[[SetupViewController alloc] init] autorelease]] autorelease]];
[viewControllers addObject:[[[UINavigationController alloc]
                             initWithRootViewController:[[[HelpViewController alloc] init] autorelease]] autorelease]];
[viewControllers addObject:[[[LinksViewController alloc] init] autorelease]];

self.viewControllers = viewControllers;
self.customizableViewControllers = [viewControllers arrayByRemovingFirstObject];


@implementation HelpViewController

#pragma mark -
#pragma mark Initialization

- (id)init
{
    if ((self = [super initWithNibName:@"HelpView" bundle:nil]) != nil) {
        self.title = NSLocalizedString(@"Help", @"Help"); 
        self.tabBarItem.image = [UIImage imageNamed:@"question.png"];
    }

    return self;
}
于 2009-09-07T15:23:31.200 に答える
0

UITabBarController で viewControllers プロパティを設定すると、ビュー コントローラー 5 以降のナビゲーション コントローラーが自動的に moreNavigationController に置き換えられます。

カスタムタブバーで同様の問題に対処しました。このソリューションは次のことに役立ちます。

カスタム UITabBarController で moreNavigationController を抑制

于 2012-05-02T16:05:53.850 に答える
0

問題は、ナビゲーション コントローラーを直接使用して新しいビューをプッシュしていることだと思います。このような:

[ctrl4 pushViewController:next animated:true];

ただし、[詳細] タブにいる場合は、別のナビゲーション コントローラーがアクティブになっています。現在表示されているビュー コントローラーの navigationController プロパティを使用して、常に現在のナビゲーション コントローラーを取得する必要があります。

このようにすることで、ナビゲーション コントローラーはタブ バー コントローラー内で問題なく動作します。

于 2009-09-14T14:36:52.203 に答える