首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >定制UIBarButtonItem

定制UIBarButtonItem
EN

Stack Overflow用户
提问于 2012-06-12 21:00:32
回答 2查看 687关注 0票数 3

我有一个自定义按钮,我想添加到导航栏。到目前为止,我的RootViewController (继承了UIViewControllerUINavigationController是通过AppDelegate添加的)如下所示:

viewDidLoad

代码语言:javascript
复制
UIBarButtonItem *share = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"icon"] style:UIBarButtonItemStylePlain target:self action:@selector(share:)];
self.navigationController.navigationItem.rightBarButtonItem = share;

下面是我的UINavigationController的设置方式:

代码语言:javascript
复制
- (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是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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的引用。

例如:

代码语言:javascript
复制
UIViewController* viewController = [[UIViewController alloc] initWithNibName:nil bundle:nil];
UINavigationController* navController = [[UINavigationController alloc] initWithRootViewController:viewController];

// This is TRUE: viewController.navigationController == navController
票数 1
EN

Stack Overflow用户

发布于 2012-06-12 22:02:22

苹果UINavigationController参考的基础上,通过对导航条进行更新,指出:

  • 如果新的顶级视图控制器具有自定义的左栏按钮,则为 项目,则显示该项目。指定自定义左栏按钮 项,设置视图控制器的leftBarButtonItem属性 导航项。
  • 如果新的顶级视图控制器具有自定义的右栏按钮,则为 项目,则显示该项目。若要指定自定义右栏按钮,请执行以下操作 项,设置视图控制器的rightBarButtonItem属性 导航项。
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11004801

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档