将 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 在运行时不会出现