我在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
,并在该块中插入按钮,但我已经超出了我的深度。
我知道如何在从笔尖加载导航控制器的过程中添加一个按钮吗?
谢谢!
答案 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.")
}