将 UIBarButtonItem 添加到 UIViewController 推送到 UINavigation 控制器

Posted

技术标签:

【中文标题】将 UIBarButtonItem 添加到 UIViewController 推送到 UINavigation 控制器【英文标题】:Add UIBarButtonItem to UIViewController pushed onto a UINavigation controller 【发布时间】:2013-03-10 19:30:57 【问题描述】:

我正在尝试将 UIViewController 推送到导航控制器上,然后将 UIBarButtonItem 添加到导航栏,以便我可以使用它来显示倒计时。

UINavigationController *navController = [[Session sharedInstance] getNavigationController];
GamePlayViewController *gameController = [[GamePlayViewController alloc] initWithNibName:@"GamePlayViewController" bundle:nil ];

UIBarButtonItem *timerBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];

gameController.navigationItem.rightBarButtonItems = [NSArray arrayWithObjects:timerBtn, nil];

[navController pushViewController:gameController animated:YES];

当我使用上面的代码时,它不起作用。我也尝试从控制器本身的 ViewDidload 方法中执行此操作,但没有骰子。我什至尝试使用 rightBarButtonItem 但收到一条错误提示

 "to uncaught exception 'NSInvalidArgumentException', reason: 'Fixed and flexible space   items not allowed as individual navigation bar button item. Please use the leftBarButtonItems (that's plural) property.'
*** First throw call stack:"




UIBarButtonItem *timerBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];

self.navigationItem.rightBarButtonItem = timerBtn;

【问题讨论】:

【参考方案1】:

如果你去 IB 并尝试添加一个灵活空间或固定空间,你会看到这 2 个对象的详细信息,说明这两个对象只能添加到正在添加到 UIToolBar 的 UIBarButtonItem,而不是到导航栏!

所以我建议您将代码更改为以下开始:

UIBarButtonItem *timerBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonItemStylePlain target:nil action:nil];

【讨论】:

以上是关于将 UIBarButtonItem 添加到 UIViewController 推送到 UINavigation 控制器的主要内容,如果未能解决你的问题,请参考以下文章

将 UIBarButtonItem 添加到 UIViewController 推送到 UINavigation 控制器

将 UIBarButtonItem 添加到 UIActionSheet 导航栏 (UIDatePicker)

如何将几个 UIBarButtonItem 添加到导航栏?

添加到情节提要的 UIBarButtonItem 在运行时不会出现

如何以编程方式将 UIBarButtonItem 添加到拖到视图上的 UINavigationBar

如何在所有视图控制器中将自定义 uibarbuttonItem 添加到我的导航项?