![](/img/trans.png)
[英]Customizing UIBarButtonItem “Done” style and “Plain” style separately using UIAppearance
[英]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.