我有一个自定义按钮,我想添加到导航栏。到目前为止,我的RootViewController (继承了UIViewController,UINavigationController是通过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类型的,我应该通过navigationController访问navigationItems。在这种情况下,navigationController是什么?
发布于 2012-06-12 21:54:22
在我将self.navigationController.navigationItem.rightBarButtonItem替换为self.navigationItem.rightBarButtonItem之后,它就起了作用。为什么会这样呢?
UIViewController的每个实例都有一个navigationItem。这包括UINavigationController,它是UIViewController的一个子类。
当出现新的视图控制器时,navigationItem由UINavigationController用于更新其可视状态。当您修改self.navigationController.navigationItem时,您正在修改如果您有嵌套UINavigationControllers将显示的内容。实际上,您将永远不会修改navigationItem的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发布于 2012-06-12 22:02:22
在苹果UINavigationController参考的基础上,通过对导航条进行更新,指出:
https://stackoverflow.com/questions/11004801
复制相似问题