gpt4 book ai didi

ios - 按需重新加载 UITabBarController

转载 作者:行者123 更新时间:2023-12-02 01:44:17 24 4
gpt4 key购买 nike

我有以下带有 2 个项目的 TabBarController。它显示正确。

我正在调用setupItems()something时从另一个 Controller 运行改变它的值。

函数调用正确,问题是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]
}

}

我尝试过:

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")
}
}

}

注意如果您想更改选定的选项卡栏项目图像,请更改“selectedImage”值,否则更改“image”值。

关于ios - 按需重新加载 UITabBarController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57681102/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com