3

ナビゲーションバーに追加したいカスタムボタンがあります。これが私がこれまでに持っているものですRootViewController(これは継承しUIViewControllerUINavigationControllerはを介して追加されますAppDelegate):

viewDidLoad

UIBarButtonItem *share = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"icon"] style:UIBarButtonItemStylePlain target:self action:@selector(share:)];
self.navigationController.navigationItem.rightBarButtonItem = share;

これが私のUINavigationController設定方法です:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.

    UIViewController *rootViewController = [[RootViewController alloc] initWithNibName:nil bundle:nil];
    UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:rootViewController];
    [navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"navbar"] forBarMetrics:UIBarMetricsDefault];
    self.window.rootViewController = navigationController;
    [self.window makeKeyAndVisible];
    return YES;
}

なぜこれが機能しないのですか?

編集:

に置き換えself.navigationController.navigationItem.rightBarButtonItemてから動作しましたself.navigationItem.rightBarButtonItem。何故ですか?私のrootviewcontrollerはタイプであり、を介してUIViewControllerアクセスする必要があります。この場合は何ですか?navigationItemsnavigationControllernavigationController

4

2 に答える 2

1

self.navigationController.navigationItem.rightBarButtonItemをself.navigationItem.rightBarButtonItemに置き換えた後に機能しました。何故ですか?

UIViewControllerのすべてのインスタンスにはnavigationItemがあります。これには、UIViewControllerのサブクラスであるUINavigationControllerが含まれます。

NavigationItemは、UINavigationControllerによって使用され、新しいViewControllerが表示されたときに視覚的な状態を更新します。を変更するself.navigationController.navigationItemと、UINavigationControllersをネストした場合に表示される内容が変更されます。実際には、ネストされたナビゲーションコントローラーがないため、UINavigationControllerのnavigationItemを変更することはありません。

navigationItemご存知のとおり、ナビゲーションコントローラで変更を有効にするには、ビューコントローラを変更する必要があります。

この場合のnavigationControllerとは何ですか?

navigationControllerは、によって表されるビューコントローラselfが現在含まれているUINavigationControllerへの参照です。

例えば:

UIViewController* viewController = [[UIViewController alloc] initWithNibName:nil bundle:nil];
UINavigationController* navController = [[UINavigationController alloc] initWithRootViewController:viewController];

// This is TRUE: viewController.navigationController == navController
于 2012-06-12T21:54:22.703 に答える
-1

ナビゲーションバーの更新によるAppleUINavigationControllerリファレンスに基づいて、次のように述べられています。

  • 新しいトップレベルのビューコントローラにカスタムの左バーボタン
    アイテムがある場合、そのアイテムが表示されます。カスタムの左バーボタン
    アイテムを指定するには、ViewControllerの ナビゲーションアイテムのleftBarButtonItemプロパティを設定します。

  • 新しいトップレベルのビューコントローラにカスタムの右バーボタン
    アイテムがある場合、そのアイテムが表示されます。カスタムの右バーボタン
    アイテムを指定するには、ViewControllerの ナビゲーションアイテムのrightBarButtonItemプロパティを設定します。

于 2012-06-12T22:02:22.143 に答える