首先,我是Swift的新手,如果我遗漏了一些明显或使用了错误的术语,我会道歉。
目标:将标签栏项目选中的图像设置为自定义图像。
以下设置有效(所选项目为自定义图片):
| UITabBarController | => | UIViewController | (设置与故事板)
TBluetoothSocket.SendData(Byte>) Method
但此设置不起作用(所选项目具有默认的蓝色色调):
| UITabBarController | => | UINavigationController | => | UIViewController | (设置w / storyboard - see here)
与上面类似的代码,但是(以编程方式)将UICollectionView子视图添加到UIViewController。
class MyViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let customSelectedImage = UIImage (named: "selected-image")?.withRenderingMode(.alwaysOriginal)
self.tabBarItem.selectedImage = customSelectedImage
}
}
有些可能有帮助的事情:
发生了什么事?
答案 0 :(得分:0)
我扩展了UITabBarController:
extension UITabBarController {
func updateTabBarItem(tab: Int, image: UIImage?) {
guard let tabItems = tabBar.items, tab < tabItems.count && tab >= 0
else { return }
let tabItem = tabItems[tab]
tabItem.image = image?.withRenderingMode(.alwaysOriginal)
tabItem.selectedImage = tabItem.image
}
}
这将有助于访问tabBar.items而无需加载任何视图控制器(选项卡0的第一个视图控制器除外)。
class MyViewController: UIViewController {
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
tabBarController?.updateTabBarItem(tab: 1, image: UIImage(named: "selected-image")) // update the second tab's image here (just for example)
}
}
例如,如果要更改选项卡2所选图像,在viewDidLoad上创建一个断点:在第二个视图控制器上,您会发现断点未命中,这就是标签项图像不会出现的原因更新。