将刷新 UIBarButtonItem 添加到从 NIB 加载的 UINavigationController
我在 UITabBarController
的第一个选项卡中加载了一个 UINavigationController
。我想在 UINavigationItem
的右侧添加一个刷新按钮。我的模糊理解是,在将导航控制器添加到控件层次结构之前,必须在导航控制器上设置标题和按钮等属性。我向子导航控制器添加按钮没有问题,但我对如何更改根目录感到困惑,因为它是从笔尖加载的。
因此,在下面的 IB 屏幕截图中(哎呀,没有足够的声誉点,让我尝试用图表表示这一点......),我尝试向所选项目添加刷新按钮。
- 文件所有者
- 急救人员
- 应用程序委托
- 窗口
- 标签栏控制器
- 标签栏
- 观察列表视图控制器
- 导航栏
- 视图控制器
- 表格视图
- 导航项
- 标签栏项目
- 另一个列表视图控制器
- 等等
- 等等
我尝试在 navigationController's
viewDidLoad
中添加按钮,但没有任何帮助:
- (void)viewDidLoad {
[super viewDidLoad];
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc]
initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh
target:self
action:@selector(refresh:)];
}
我还尝试以编程方式将我的 ObservationListViewController
添加到 UITabBarController
中,并将按钮插入到该块中,但我远远超出了我的能力范围。
知道如何在从笔尖加载导航控制器的过程中注入添加按钮吗?
谢谢你!
I have a UINavigationController
loading in the first tab of a UITabBarController
. I'd like add a refresh button on the right side of the UINavigationItem
. My dim understanding is that one has to set properties like titles and buttons on a nav controller before it's added to the control hierarchy. I have no problem adding buttons to the child navigation controller, but I'm stumped by how to change the root, since it's loading from the nib.
So in the IB screencap below (oops, not enough reputation points, let me try to diagram this....), I'm trying to add a refresh button to the selected item.
- File's Owner
- First Responder
- App Delegate
- Window
- Tab Bar Controller
- Tab Bar
- Observation List View Controller
- Navigation Bar
- View Controller
- Table View
- Navigation Item
- Tab Bar Item
- Another List View Controller
- etc.
- etc.
I've tried to add the button in the navigationController's
viewDidLoad
, with no help:
- (void)viewDidLoad {
[super viewDidLoad];
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc]
initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh
target:self
action:@selector(refresh:)];
}
I've also tried to programmatically add my ObservationListViewController
to the UITabBarController
, and insert the button in that block, but I'm way out of my depth.
Any idea how I could inject adding a button into the process of loading a nav controller from the nib?
Thank you!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
看起来您的 viewDidLoad 方法正在分配但没有释放栏按钮项目。你应该这样做:
你不需要在导航控制器中执行此操作,而是在导航控制器中包含的根视图控制器中执行此操作。换句话说,将其放在“视图控制器”而不是“观察列表视图控制器”中。
您推送到导航控制器上的每个控制器都可以拥有自己的 self.navigationItem.whatever ,并且当推送新控制器时,导航控制器将显示该内容到它的堆栈上。
It looks like your viewDidLoad method is allocating but not releasing the bar button item. you should do this:
You need to do this not in the nav controller, but in the root view controller that's contained within the navigation controller. In other words, put it in "View Controller" not "Observation List View Controller"
Each controller you push onto the nav controller can have it's own self.navigationItem.whatever and this will be displayed by the nav controller when the new controller is pushed onto its stack.
致力于SWIFT 4.1
Worked on SWIFT 4.1
复制粘贴解决方案:
Copy-paste solution: