将刷新UIBarButtonItem添加到从NIB加载的UINavigationController

Sco*_*ott 9 iphone objective-c uinavigationbar uinavigationcontroller uinavigationitem

我在a UINavigationController的第一个标签中有一个加载UITabBarController.我想在右侧添加一个刷新按钮UINavigationItem.我的朦胧理解是,在将其添加到控件层次结构之前,必须在导航控制器上设置标题和按钮等属性.我没有问题将按钮添加到子导航控制器,但我很难知道如何更改根,因为它是从笔尖加载的.

因此,在下面的IB屏幕上(哎呀,没有足够的声誉点,让我试图绘制这个......),我正在尝试为所选项添加一个刷新按钮.

  • 文件的所有者
  • 急救人员
  • App代表
  • 窗口
  • 标签栏控制器
    • 标签栏
    • 观察列表视图控制器
      • 导航栏
      • 查看控制器
        • 表视图
        • 导航项目
      • 标签栏项目
    • 另一个List View Controller
    • 等等
    • 等等

我试图添加按钮navigationController's viewDidLoad,没有任何帮助:

- (void)viewDidLoad {
[super viewDidLoad]; 

self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc]
         initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh
         target:self
             action:@selector(refresh:)];
}
Run Code Online (Sandbox Code Playgroud)

我还尝试以编程方式将我添加ObservationListViewControllerUITabBarController,并在该块中插入按钮,但我的方式已经超出了我的深度.

知道如何在从笔尖加载导航控制器的过程中添加一个按钮吗?

谢谢!

Nim*_*rod 21

看起来你的viewDidLoad方法正在分配但不释放条形按钮项.你应该做这个:

UIBarButtonItem *button = [[UIBarButtonItem alloc]
     initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh
     target:self
         action:@selector(refresh:)];
self.navigationItem.rightBarButtonItem = button;
[button release];
Run Code Online (Sandbox Code Playgroud)

您不需要在导航控制器中执行此操作,而是在导航控制器中包含的根视图控制器中执行此操作.换句话说,把它放在"视图控制器"而不是"观察列表视图控制器"中

您推入导航控制器的每个控制器都可以拥有自己的self.navigationItem.whatever,当新控制器被推入其堆栈时,导航控制器将显示该控制器.