在导航栏中插入图标​​/使 BarButtonItem 不可点击 Swift iOS

Posted

技术标签:

【中文标题】在导航栏中插入图标​​/使 BarButtonItem 不可点击 Swift iOS【英文标题】:Insert Icon in Navigation Bar / make BarButtonItem not clickable Swift iOS 【发布时间】:2019-09-05 18:15:34 【问题描述】:

我想在导航栏中放置一个蓝牙图标,以显示连接/断开状态。

我尝试添加一个 BarButtonItem,将图像设置为我的蓝牙图标,然后禁用和启用此按钮。到目前为止,这工作正常,对我来说看起来还不错,但我不想让这个按钮可以点击,这样它就不会在点击图标时改变颜色。

这可能吗,或者有没有办法将 UIImageView 放入导航栏?

谢谢!

【问题讨论】:

【参考方案1】:

尝试使用以下方法禁用触摸事件:

myBarButtonItem.isUserInteractionEnabled = false

【讨论】:

不幸的是,UIBarButtonItems 似乎没有 isUserInteractionEnabled 属性:(【参考方案2】:

navigationItem.rightBarButtonItem?.isEnabled = false

【讨论】:

我使用 isEnabled = false 来显示未连接状态。这很好用,但我也想显示连接状态,但是一旦禁用,我就无法更改 tintColor,这就是我需要解决方法的原因。 将其转换为自定义 UIButton? rightNavButton = UIButton(type: .custom) 然后这样自定义?【参考方案3】:

添加以下代码将解决您的问题。

let btnBluetooth = UIButton()
btnBluetooth.setImage(#imageLiteral(resourceName: "icon_bluetooth"), for: .normal)
btnBluetooth.setImage(#imageLiteral(resourceName: "icon_bluetooth"), for: .highlighted)
btnBluetooth.tintColor = .red

let barButton = UIBarButtonItem(customView: btnBluetooth)
self.navigationItem.rightBarButtonItem = barButton

此代码将添加自定义按钮,您可以在其中管理正常和突出显示模式的图像。对于蓝牙状态管理,将您在UIBarButtonItem 中添加的UIButton 中的tintColor 更改为自定义视图。

如果你点击按钮,这不会改变图像的颜色。

如果您不想添加UIButton,可以通过以下代码添加UIImageView

let imgBluetooth = UIImageView(image: #imageLiteral(resourceName: "icon_bluetooth"))
imgBluetooth.tintColor = .red

let barButton = UIBarButtonItem(customView: imgBluetooth)
self.navigationItem.rightBarButtonItem = barButton

另外,请确保您已选择 Render As 作为 Template Image 用于添加到 Assets.xcassets 内以影响 tintColor 的蓝牙图标。否则图像将显示为原始图像。见下文:

【讨论】:

以上是关于在导航栏中插入图标​​/使 BarButtonItem 不可点击 Swift iOS的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Bootstrap 3 的导航栏中添加带有图标的搜索框?

如何在 bootstrap4 导航栏中对齐社交媒体图标及其工具提示?

自定义导航栏中后退图标和文本的间距和格式

使用操作栏中的图标按钮导航到另一个活动

隐藏 iOS 导航栏中的所有内容,包括图标

使用操作栏中的图标按钮导航到另一个活动