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

时间:2010-10-19 19:36:57

标签: iphone objective-c uinavigationcontroller uinavigationbar uinavigationitem

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

所以在下面的IB屏幕截图中(哎呀,没有足够的声望点,让我尝试图解这个....),我正在尝试为所选项添加一个刷新按钮。

  
      
  • 文件所有者
  •   
  • 第一响应者
  •   
  • App Delegate
  •   
  • 窗口
  •   
  • 标签栏控制器      
        
    • Tab Bar
    •   
    • 观察清单视图控制器      
          
      • 导航栏
      •   
      • 查看控制器      
            
        • 表格视图
        •   
        • 导航项目
        •   
      •   
      • 标签栏项目
      •   
    •   
    • 另一个列表视图控制器
    •   
    •   
    •   
  •   

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

- (void)viewDidLoad {
[super viewDidLoad]; 

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

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

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

谢谢!

3 个答案:

答案 0 :(得分:21)

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

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

您不需要在导航控制器中执行此操作,而是在导航控制器中包含的根视图控制器中执行此操作。换句话说,将其放在“视图控制器”而不是“观察列表视图控制器”

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

答案 1 :(得分:1)

使用 SWIFT 4.1

navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: 
UIBarButtonSystemItem.refresh, target: self, action: 
#selector(RootViewController.refresh))

答案 2 :(得分:0)

复制粘贴解决方案:

override func viewDidLoad() {
    super.viewDidLoad()
    navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .refresh, target: self, action: #selector(refresh))
}

@objc func refresh() {
    print("Refreshing.")
}