我希望能够在满足特定条件后添加新的TabBarItem
。因此,最初该应用有两个TabBarItems
,但是如果您选择以管理员身份登录,我希望显示第三个TabBarItem
我可以在扩展TabBarItem
的{{1}}的{{1}}的{{1}}中添加viewDidLoad
罚款。但是,如果我添加了一个名为TabBarController
的函数,该函数调用完全相同的代码,则会执行该代码,但视图不会得到更新。
UITabBarController
现在在我从中调用方法的类中(省略了一些不相关的代码
addNewTabBar
答案 0 :(得分:0)
您尝试获取自己的TabBarController
,但是又有了另一个。您应该获取TabBarController
的实例。您可以通过几种方法来达到目的。为了简单起见,我建议您选择其中之一。
首先,在您的main
中声明var TabBarController
:
static var main : TabBarController? = nil
在viewDidLoad
或viewWillAppear
上添加代码:
TabBarController.main = self // a part of 'singletone' approach
并在您的另一个控制器中使用:
TabBarController.main?. addNewTabBarItem()
将类用于单个实例非常重要。
答案 1 :(得分:0)
第一个标签页的视图控制器中的这一行:
let tbController = TabBarController()
创建TabBarController
的 new 实例-它不提供对现有实例的访问。
因此,在第一个标签的视图控制器中:
class HjelmslundFirstViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// this gets a reference to the existing custom TabBarController
if let tbc = self.tabBarController as? TabBarController {
tbc.addNewTabBarItem()
}
}
}
请注意,应始终拆开可选项,并检查有效的对象。因此,在您的自定义TabBarController
类中:
func addNewTabBarItem(){
let sb = UIStoryboard(name: "Data", bundle: nil)
if let roomChooserVC = sb.instantiateViewController(withIdentifier: "roomchooser") as? RoomChooserController {
roomChooserVC.tabBarItem = UITabBarItem(tabBarSystemItem: .downloads, tag: 3)
self.viewControllers?.append(roomChooserVC)
}
}
当然,您还需要添加错误处理代码,以防if
条件失败。