rightBarButtonItem 没有出现在导航栏 iOS

Posted

技术标签:

【中文标题】rightBarButtonItem 没有出现在导航栏 iOS【英文标题】:rightBarButtonItem does not appear in Navigation Bar iOS 【发布时间】:2012-09-12 20:23:43 【问题描述】:

我在显示导航栏的 rightBarButtonItem 时遇到问题 - 我正在尝试在应用程序委托中以编程方式创建它,我的 UINavigationController 在此设置。

代码如下:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

// Override point for customization after application launch.
RSCListViewController *list = [[RSCListViewController alloc] initWithStyle:UITableViewStylePlain];
self.navController = [[UINavigationController alloc] initWithRootViewController:list];

UIBarButtonItem *barButton = [[UIBarButtonItem alloc] initWithTitle:@"+"
                                                              style:UIBarButtonItemStylePlain
                                                             target:list
                                                             action:@selector(addPressed:)];

self.navController.navigationItem.rightBarButtonItem = barButton;

self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];

[DatabaseManager openDatabase];

return YES;

运行应用程序,导航栏上没有出现任何按钮项。

我不确定我是否遗漏了一些明显的东西 - 我尝试使用相关的 Stack Overflow 线程来纠正问题并没有取得任何成功。

任何帮助表示赞赏。

【问题讨论】:

其他都显示正确吗? 【参考方案1】:

您需要将条形按钮项附加到自定义视图控制器,而不是导航控制器。来自Updating the Navigation Bar:

此外,导航控制器对象构建的内容 导航栏动态使用导航项(实例 UINavigationItem 类)与视图控制器相关联 导航堆栈。要更改导航栏的内容, 因此,您必须为自定义视图配置导航项 控制器。

(...)

导航控制器更新导航栏右侧 如下:

如果新的***视图控制器具有自定义右栏按钮项,则会显示该项。指定自定义右栏按钮 item,设置视图控制器的 rightBarButtonItem 属性 导航项。

如果未指定自定义右栏按钮项,则导航栏右侧不显示任何内容。

因此,替换:

self.navController.navigationItem.rightBarButtonItem = barButton;

与:

list.navigationItem.rightBarButtonItem = barButton;

【讨论】:

谢谢 - 假设导航栏上显示的元素与导航控制器而不是堆栈顶部的视图相关联......但现在我想起来了,这不会很有意义,因为导航栏经常会随着显示哪个视图而改变。再次感谢您的帮助。 由于某些原因,当您设置 rightBarButtonItem 的导航项的 VC 是 rootViewController 时,它不起作用:-( 但是,正如您所说,只要 vc 使用 @navigationItem.rightBarButtonItem = 不管;它就可以正常工作;"虽然被推到导航堆栈上。 什么是list @DanielSpringer 自定义视图控制器 (RSCListViewController)。阅读问题中的代码sn-p 那么在视图控制器文件本身我应该使用类名吗?这很不寻常。现在,对我有用的是将 self.navController.navigationItem.rightBarButtonItem = barButton 替换为 navigationItem.rightBarButtonItem = barButton - 但我不知道为什么会这样。和 MyViewController.navigationItem.rightBarButtonItem = barButton 一样吗?

以上是关于rightBarButtonItem 没有出现在导航栏 iOS的主要内容,如果未能解决你的问题,请参考以下文章

rightBarButtonItem 出现在中间

RightBarButtonItem 未出现在导航栏中

UINavigationController rightbarbuttonitem没有显示

rightBarButtonItem 图像未显示

设置 rightBarButtonItem 禁止 UIViewController 被释放

iOS7 iphone rightBarButtonItem 标题未正确居中/显示