the*_*lus 7 uitabbarcontroller uiviewcontroller ios swift swift5
我有以下带有2个项目的TabBarController。显示正确。
setupItems()当something更改其值时,我正在从另一个控制器调用该函数。
该函数已正确调用,问题navFirstController.tabBarItem.image是未更新。
class TabBarController: UITabBarController {
override func viewDidLoad() {
super.viewDidLoad()
setupItems()
}
func setupItems() {
let scale: CGFloat = 0.35
let navFirstController = UINavigationController(rootViewController: FirstController())
let navSecondController = UINavigationController(rootViewController: SecondController())
navSecondController.tabBarItem.image = UIImage.scale(image: UIImage(named: "image2")!, by: scale)
navSecondController.tabBarItem.imageInsets = UIEdgeInsets(top: 8, left: 0, bottom: -8, right: 0)
if something == true {
navFirstController.tabBarItem.image = UIImage.scale(image: UIImage(named: "image1")!, by: scale)
} else {
navFirstController.tabBarItem.image = UIImage.scale(image: UIImage(named: "image3")!, by: scale)
}
navFirstController.tabBarItem.imageInsets = UIEdgeInsets(top: 8, left: 0, bottom: -8, right: 0)
viewControllers = [navSecondController, navFirstController]
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试过:
1)viewControllers?.remove(at: 1)在开始时setupItems()
2)navFirstController.removeFromParent()在开始时setupItems()
3)self.viewWillLayoutSubviews()末尾setupItems()
4)self.view.setNeedsLayout(),self.view.setNeedsDisplay()在setupItems()
我认为我们不需要再次创建 viewControllers 对象来更改选项卡栏图像。只是我们需要从 viewControllers 数组中获取 viewController 对象并更改图像。
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
}
class SecondViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func btnClicked(_ sender: Any) {
//change image of tab bar item on button clicked
if let tabVC = self.tabBarController as? TabBarController {
tabVC.changeImage()
}
}
}
class TabBarController: UITabBarController {
override func viewDidLoad() {
super.viewDidLoad()
setupItems()
}
func setupItems() {
let storyboard = UIStoryboard(name: "Main", bundle: Bundle.main)
let firstVC = storyboard.instantiateViewController(withIdentifier: "First")
let navFirstController = UINavigationController(rootViewController: firstVC)
navFirstController.tabBarItem.image = UIImage(named: "Image1")
let secondVC = storyboard.instantiateViewController(withIdentifier: "Second")
let navSecondController = UINavigationController(rootViewController: secondVC)
navSecondController.tabBarItem.image = UIImage(named: "Image2")
viewControllers = [navSecondController, navFirstController]
}
func changeImage() {
if let second = viewControllers?[1] as? UINavigationController {
second.tabBarItem.selectedImage = UIImage(named: "Image3")
second.tabBarItem.image = UIImage(named: "Image3")
}
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,如果您想更改选定的选项卡栏项目图像,请更改“selectedImage”值,否则更改“image”值。
| 归档时间: |
|
| 查看次数: |
176 次 |
| 最近记录: |