在所有子视图中使用相同的UINavigationBar对象

时间:2012-08-08 19:46:47

标签: ios5 uinavigationcontroller xcode4.2 storyboard uinavigationbar

我正在开发一个ios应用程序并使用故事板(第一次使用它)来设计ui所以我有以下内容:

  • 入口点:导航控制器
  • rootView视图控制器(推送到许多其他视图,其中一些是UITableView)
  • 然后我以编程方式推送(在某些控制器中)从笔尖加载的视图(没问题)

每个控制器都有一个已定义的标题。

我想要做的是在所有视图控制器的导航栏上放置一个rigth按钮,这样我就可以(以编程方式)推送到另一个控制器(希望是在笔尖,但我可以将它移动到SB whit没有问题)

我试过了:

  • 使用自定义类和nib文件,但我得到了相同的未加工的导航栏
  • 覆盖initWithCoder,所以我可以将它重定向到de nib文件,但得到一个无限循环(StakOverflow,yay!)
  • 使用第二个类来避免无限循环但得到异常:

      

    由于未捕获的异常'NSGenericException'而终止应用程序,原因:'此编码器要求从initWithCoder返回替换的对象:

  • 在导航栏类的init方法中手动添加按钮,没有效果

  • 替换导航控制器initWithCoder中的导航栏,没有效果
  • 相同但在导航控制器的viewDidLoad方法中,没有效果
  • 相同但在rootView控制器中没有效果

我正在使用的代码就是这个(以及一些变体):

UIBarButtonItem *BTN = [[UIBarButtonItem alloc] 
      initWithImage:[[UIImage alloc] initWithContentsOfFile:@"img.png"] 
      style:UIBarButtonItemStyleBordered 
      target:self 
      action:@selector(pushView)];

[[self navigationItem] setRightBarButtonItem:BTN];

以任何方式我都可以存档,或者我应该手动查看每个视图吗?

- 感谢

1 个答案:

答案 0 :(得分:3)

是的,你需要在每个视图控制器中为它的navigationItem属性做。但是你可以通过在category类上创建一个UIBarButtonItem来简化它,它将有一个方法配置并返回你需要的按钮。 所以你只需要调用该类别的方法,而不需要在任何地方编写相同的代码。

以下是一些类似的帖子:

Adding same button to all view controllers in UINavigationController

Adding UIBarButtonItem to all Navigation View Controllers inside a UITabBarController programmatically