簡體   English   中英

自定義UIBarButtonItem

[英]Customizing UIBarButtonItem

我有一個我要添加到導航欄的自定義按鈕。 所以這就是我目前在RootViewController (它繼承了UIViewController ,通過AppDelegate添加了UINavigationController ):

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.navigationItem.rightBarButtonItem替換self.navigationController.navigationItem.rightBarButtonItem之后,它工作了。 這是為什么? 我的RootViewController的是類型UIViewController ,我應該訪問navigationItems通過navigationController 在這種情況下, navigationController是什么?

在用self.navigationItem.rightBarButtonItem替換self.navigationController.navigationItem.rightBarButtonItem之后,它工作了。 這是為什么?

UIViewController的每個實例都有一個navigationItem。 這包括UINavigationController,它是UIViewController的子類。

當新的視圖控制器出現時,UINavigationController使用navigationItem來更新其可視狀態。 修改self.navigationController.navigationItem ,如果嵌套了UINavigationControllers,則修改將顯示的內容。 在實踐中,您永遠不會修改UINavigationController的navigationItem,因為您將沒有嵌套的導航控制器。

正如您所發現的那樣,您必須修改視圖控制器的navigationItem ,以使更改在導航控制器中生效。

在這種情況下,navigationController是什么?

navigationController是對UINavigationController的引用,其中由self表示的視圖控制器當前包含在其中。

例如:

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

// This is TRUE: viewController.navigationController == navController

基於Apple UINavigationController參考,通過更新導航欄,它被聲明

  • 如果新的頂級視圖控制器具有自定義左欄按鈕
    item,顯示該項目。 指定自定義左欄按鈕
    item,設置視圖控制器的leftBarButtonItem屬性
    導航項目。

  • 如果新的頂級視圖控制器具有自定義右側欄按鈕
    item,顯示該項目。 指定自定義右側欄按鈕
    item,設置視圖控制器的rightBarButtonItem屬性
    導航項目。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM