10

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

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

  • 文件所有者
  • 急救人员
  • 应用代理
  • 窗户
  • 标签栏控制器
    • 标签栏
    • 观察列表视图控制器
      • 导航栏
      • 视图控制器
        • 表视图
        • 导航项
      • 标签栏项目
    • 另一个列表视图控制器
    • 等等
    • 等等

我试图在navigationController's viewDidLoad没有帮助的情况下添加按钮:

- (void)viewDidLoad {
[super viewDidLoad]; 

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

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

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

谢谢!

4

3 回答 3

20

看起来您的 viewDidLoad 方法正在分配但没有释放栏按钮项。你应该做这个:

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

您不需要在导航控制器中执行此操作,而是在导航控制器中包含的根视图控制器中执行此操作。换句话说,把它放在“View Controller”而不是“Observation List View Controller”

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

于 2010-10-19T19:49:30.003 回答
1

使用SWIFT 4.1

navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: 
UIBarButtonSystemItem.refresh, target: self, action: 
#selector(RootViewController.refresh))
于 2018-12-14T05:17:34.027 回答
0

复制粘贴解决方案:

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

@objc func refresh() {
    print("Refreshing.")
}
于 2020-10-28T10:26:36.813 回答