导航栏中未显示栏按钮项
Bar button item not shown in navigationBar
我正在开发一个应用程序,其中我的初始视图控制器嵌入在导航控制器和选项卡栏控制器中。
在我的应用程序中,我有 3 个不同的选项卡,一个选项卡是设置视图。这是一个有 5 个按钮的 tableview。每个按钮在被触摸时都会显示相同的视图控制器。
当我触摸其中一个按钮时,我仍然有一个漂亮的绿色导航栏,但我的按钮不起作用。
我尝试将一个导航项拖到故事板的视图中,然后在其中放置一个条形按钮项。我可以在故事板中看到该按钮,但当我 运行 它时,它不会显示在我的应用程序中。
我还在 viewDidLoad() 中添加了以下代码:
let leftItem = UIBarButtonItem(title: "< Back", style: .Done, target: self, action: Selector("Save"))
let rightItem = UIBarButtonItem(title: "Save", style: .Plain, target: self, action: Selector("Save"))
//self.parentViewController?.navigationItem.leftBarButtonItem = leftItem // also doesn't work
navigationController?.navigationItem.leftBarButtonItem = leftItem
navigationController?.navigationItem.rightBarButtonItem = rightItem
但是不会有任何效果。
我检查了故事板中是否将正确的 UIViewController 分配给了我的视图,做了几次清理构建 (CMD + Shift + K) 和重建 (CMD + B)。
以下图片是我的故事板的一部分的屏幕截图和我的应用程序在按钮不会显示的视图中的屏幕截图。
编辑
添加了有关视图中控件的新屏幕截图。如果我的 viewDidLoad 中没有附加代码,这些不适用于 或 。
而不是
navigationController?.navigationItem.leftBarButtonItem = leftItem
做
navigationItem.leftBarButtonItem = leftItem
更新 我建议您直接在故事板中将它们添加到您的 Viewcontroller
删除您的第一个导航控制器,其次您不需要添加后退按钮只需使用 push segue,第三次尝试使用 self.navigationItem.leftBarButtonItem(尝试在开头添加自己。)*原始答案是评论。
UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 40, 40)];
[button setImage:[[UIImage imageNamed:@"BtnBack"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] forState:UIControlStateNormal];
[button.imageView setTintColor:[UIColor whiteColor]];
[button addTarget:self action:@selector(buttonClicked:)
forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *buttonItem = [[UIBarButtonItem alloc]
initWithCustomView:button];
self.navigationItem.leftBarButtonItem = buttonItem;
此代码写在 ViewWillAppear 方法上。
最近发生在我身上。我正在做 Ersin 提到的事情,但无济于事。再回溯一下,发现罪魁祸首是这个:
nav.pushViewController(notifications, animated: false)
nav.pushViewController(interactionCreateOrEdit, animated: false)
我改成了
nav.setViewControllers([notifications, interactionCreateOrEdit], animated: false)
UIBarButtonItems 又开始出现了。
我有两个转场:一个是通过故事板转场,一个是程序化的。故事板 segue 显示了预期的按钮。然而,编程 segue 显示了没有按钮的视图。
对于程序化的 segue,我使用的是:
present(theNewVC, animated: true)
当我将其更改为:
时,按钮出现并正常运行
show(theNewVC, sender: self)
根据文档,present(...)
以模态方式呈现视图控制器。显然,模态视图控制器没有获得导航栏按钮。我通过将我的故事板 segue 更改为 Present Modally
进一步证实了这一点 - 按钮也在那里消失了。
(使用 Xcode 9,Swift 4)
我也 运行 遇到了同样的问题。
在 iOS 11 中,它工作正常,但对于 iOS 10 或更少,它没有显示以编程方式添加的 UIBarButtonItems。
请将框架分配给 UIBarButtonItem。
let button = UIButton(type: .custom)
button.setImage(UIImage(named: "img_name"), for:.normal)
button.addTarget(self, action: #selector(btnAction), for: .touchUpInside)
button.frame = CGRect(x:0, y:0, width:32, height:32)
let barButton = UIBarButtonItem(customView: button)
self.navigationItem.rightBarButtonItem = barButton
我正在开发一个应用程序,其中我的初始视图控制器嵌入在导航控制器和选项卡栏控制器中。
在我的应用程序中,我有 3 个不同的选项卡,一个选项卡是设置视图。这是一个有 5 个按钮的 tableview。每个按钮在被触摸时都会显示相同的视图控制器。
当我触摸其中一个按钮时,我仍然有一个漂亮的绿色导航栏,但我的按钮不起作用。
我尝试将一个导航项拖到故事板的视图中,然后在其中放置一个条形按钮项。我可以在故事板中看到该按钮,但当我 运行 它时,它不会显示在我的应用程序中。
我还在 viewDidLoad() 中添加了以下代码:
let leftItem = UIBarButtonItem(title: "< Back", style: .Done, target: self, action: Selector("Save"))
let rightItem = UIBarButtonItem(title: "Save", style: .Plain, target: self, action: Selector("Save"))
//self.parentViewController?.navigationItem.leftBarButtonItem = leftItem // also doesn't work
navigationController?.navigationItem.leftBarButtonItem = leftItem
navigationController?.navigationItem.rightBarButtonItem = rightItem
但是不会有任何效果。
我检查了故事板中是否将正确的 UIViewController 分配给了我的视图,做了几次清理构建 (CMD + Shift + K) 和重建 (CMD + B)。
以下图片是我的故事板的一部分的屏幕截图和我的应用程序在按钮不会显示的视图中的屏幕截图。
编辑
添加了有关视图中控件的新屏幕截图。如果我的 viewDidLoad 中没有附加代码,这些不适用于 或 。
而不是
navigationController?.navigationItem.leftBarButtonItem = leftItem
做
navigationItem.leftBarButtonItem = leftItem
更新 我建议您直接在故事板中将它们添加到您的 Viewcontroller
删除您的第一个导航控制器,其次您不需要添加后退按钮只需使用 push segue,第三次尝试使用 self.navigationItem.leftBarButtonItem(尝试在开头添加自己。)*原始答案是评论。
UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 40, 40)];
[button setImage:[[UIImage imageNamed:@"BtnBack"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] forState:UIControlStateNormal];
[button.imageView setTintColor:[UIColor whiteColor]];
[button addTarget:self action:@selector(buttonClicked:)
forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *buttonItem = [[UIBarButtonItem alloc]
initWithCustomView:button];
self.navigationItem.leftBarButtonItem = buttonItem;
此代码写在 ViewWillAppear 方法上。
最近发生在我身上。我正在做 Ersin 提到的事情,但无济于事。再回溯一下,发现罪魁祸首是这个:
nav.pushViewController(notifications, animated: false)
nav.pushViewController(interactionCreateOrEdit, animated: false)
我改成了
nav.setViewControllers([notifications, interactionCreateOrEdit], animated: false)
UIBarButtonItems 又开始出现了。
我有两个转场:一个是通过故事板转场,一个是程序化的。故事板 segue 显示了预期的按钮。然而,编程 segue 显示了没有按钮的视图。
对于程序化的 segue,我使用的是:
present(theNewVC, animated: true)
当我将其更改为:
时,按钮出现并正常运行show(theNewVC, sender: self)
根据文档,present(...)
以模态方式呈现视图控制器。显然,模态视图控制器没有获得导航栏按钮。我通过将我的故事板 segue 更改为 Present Modally
进一步证实了这一点 - 按钮也在那里消失了。
(使用 Xcode 9,Swift 4)
我也 运行 遇到了同样的问题。
在 iOS 11 中,它工作正常,但对于 iOS 10 或更少,它没有显示以编程方式添加的 UIBarButtonItems。
请将框架分配给 UIBarButtonItem。
let button = UIButton(type: .custom)
button.setImage(UIImage(named: "img_name"), for:.normal)
button.addTarget(self, action: #selector(btnAction), for: .touchUpInside)
button.frame = CGRect(x:0, y:0, width:32, height:32)
let barButton = UIBarButtonItem(customView: button)
self.navigationItem.rightBarButtonItem = barButton