Iphone 定制uibarbuttonim
我想在导航栏上添加一个自定义按钮。下面是我目前在Iphone 定制uibarbuttonim,iphone,objective-c,uinavigationcontroller,uinavigationbar,uibarbuttonitem,Iphone,Objective C,Uinavigationcontroller,Uinavigationbar,Uibarbuttonitem,我想在导航栏上添加一个自定义按钮。下面是我目前在RootViewController中所拥有的内容(它继承了UIViewController,通过AppDelegate添加了UINavigationController): 在viewDidLoad中: UIBarButtonItem *share = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"icon"] style:UIBarButtonItemStylePlai
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;
以下是myUINavigationController
的设置方式:
- (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.RightBarButtonim
替换为self.navigationItem.RightBarButtonim
后,它就工作了。为什么呢?我的rootviewcontroller属于UIViewController
类型,我应该通过navigationController
访问navigationItems
。在这种情况下,navigationController
是什么
在我将self.navigationController.navigationItem.RightBarButtonim替换为self.navigationItem.RightBarButtonim后,它工作了。为什么呢
UIViewController的每个实例都有一个navigationItem。这包括UINavigationController,它是UIViewController的子类
当新视图控制器出现时,UINavigationController使用navigationItem更新其视觉状态。当您修改self.navigationController.navigationItem时,您正在修改如果您有嵌套的UINavigationControllers将显示的内容。实际上,您永远不会修改UINavigationController的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
通过更新导航栏,声明
- 如果新的顶级视图控制器具有自定义左栏按钮
项目,将显示该项目。指定自定义左栏按钮的步骤
项,设置视图控制器的
导航项 - 如果新的顶级视图控制器具有自定义右栏按钮
项目,将显示该项目。指定自定义右栏按钮的步骤
项,设置视图控制器的
导航项
UIViewController
都包含使用proeprtynavigationController
的对其导航控制器的引用。但是navigationItem
是UIViewController
的属性,而不是UINavigationController
(UINavigationController继承它,因为它是UIViewController的子类)。我想这可能是一个常见的误解,navigationItem
是UINavigationController
的属性。还有一个问题,那么如果ViewController没有导航栏,那么将其改为UINavigationController
属性是否更有意义呢?视图控制器不拥有导航栏,导航控制器拥有导航栏。想象一下,如果导航控制器有一个导航项。这意味着每次出现一个视图控制器时,都必须显式重置导航项属性。因此视图控制器具有某种指向导航栏的弱指针?如果视图控制器不拥有它,那么为什么navigationItem
是视图控制器的属性?视图控制器和导航项之间的关系是什么?弱指针?