如何在 iOS 的导航栏中添加标准信息按钮?
Posted
技术标签:
【中文标题】如何在 iOS 的导航栏中添加标准信息按钮?【英文标题】:How to add a standard info button to a navigation bar in iOS? 【发布时间】:2016-10-10 09:36:36 【问题描述】:我想在导航栏中添加一个带有系统信息图标的右栏按钮。但我看到UIBarButtonSystemItem
没有提供这种类型的按钮。另一方面,所以我尝试使用UIButtonType.infoLight
类型的UIButton
,但我不能将其分配给navigationItem.rightBarButtonItems
。
有什么办法吗?
【问题讨论】:
【参考方案1】:这可以使用.infoLight
类型的UIButton
对象来实现
let infoButton = UIButton(type: .infoLight)
infoButton.addTarget(self, action: #selector(infoButtonTapped), forControlEvents: .TouchUpInside)
let barButton = UIBarButtonItem(customView: infoButton)
self.navigationItem.rightBarButtonItem = barButton
或者:
通过将infoImage
添加到您的Asset catalog
并使用以下代码创建barButtonItem
let infoButton = UIBarButtonItem(image: UIImage(named: "infoImage"), style: .Plain, target: self, action: #selector(ViewController.infoButtonTapped))
self.navigationItem.rightBarButtonItem = infoButton
【讨论】:
这很不方便。 那就更不方便了。已经有一个预先制作的信息按钮。既然 OP 要求的是默认的,为什么要让加载图片等变得复杂呢? @LinusG。您不能将 UIBarButton 与 type 一起使用。 InfoLight 没有在 UIBarButtonTypes 中提供,但可以与 UIButton 类型一起使用。如果您有解决方案,请提供解决方案,而不是评论 Approcaches。【参考方案2】:我发现了一种使用 Interface Builder 将信息图标添加到导航栏的更简单方法。
-
不要将条形按钮项添加到导航栏
向 UIView 添加按钮
将按钮类型更改为信息灯
将按钮拖放到导航栏的右上角。这就是全部。 Bar Button Item 将自动出现,添加的 info Button 将位于 Bar Button Item 下方
(然后,像往常一样对 Button 进行操作)
【讨论】:
将 UIButton 拖到导航栏上! (或工具栏,在我的情况下)。您不必先将其放在视图上。效果很好。【参考方案3】:您可以使用自定义视图初始化UIBarButtonItem
:
let button = UIButton(type: .infoLight)
let barButton = UIBarButtonItem(customView: button)
【讨论】:
再一步,设置按钮的初始框架。 button.frame = CGRect(x: 0, y: 0, width: 34, height: 30)【参考方案4】:Swift 5.0
override func viewDidLoad()
super.viewDidLoad()
let infoButton = UIButton(type: .infoLight)
infoButton.addTarget(self, action: #selector(infoButtonTapped), for: .touchUpInside)
navigationItem.rightBarButtonItem = UIBarButtonItem(customView: infoButton)
@objc func infoButtonTapped()
【讨论】:
【参考方案5】:UIButton *doneBtn = [[UIButton alloc] initWithFrame...];
[doneBtn setTitle:@"Submit" forState:UIControlStateNormal];
doneBtn.titleLabel.font = [UIFont systemFontOfSize: 14.0];
[doneBtn addTarget:self action:@selector(doSubmit:) forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *rightButton = [[UIBarButtonItem alloc] initWithCustomView:doneBtn];
self.navigationItem.rightBarButtonItem = rightButton;
【讨论】:
【参考方案6】:将 infoButton 图像添加到您的资产中,并通过提供名称设置为 barButton。
UIBarButtonItem *item = [[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@"infoImage.png"] style:UIBarButtonItemStyleDone target:self action:@selector(barButtonAction)];
self.navigationItem.rightBarButtonItem = item;
在斯威夫特中
let item = UIBarButtonItem(image: UIImage(named: "infoImage.png"), style: .Plain, target: self, action: #selector(barButtonAction))
self.navigationItem.rightBarButtonItem = item
【讨论】:
谢谢,但实际上我不想提供图像而是使用标准图标以上是关于如何在 iOS 的导航栏中添加标准信息按钮?的主要内容,如果未能解决你的问题,请参考以下文章