【发布时间】:2018-05-28 10:33:44
【问题描述】:
我有一个UITabBarController,带有 3 个选项卡和一个SettingsVC,您可以在其中选择MainVC 的外观(有2 个不同的ViewControllers,根据用户的喜好应显示为MainVC) .
我创建了这个应用程序,它可以工作,但它确实有问题,因为我只是将ViewControllers 相互叠加,并且在某些特定情况下,您在切换tabs 时会看到错误。
Main.storyboard
这是我的代码的一部分(在尝试了很多东西之后),它根据 UserDefaults 更改了 VC
CheckSettingsStatus.swift
//
// Check for Double Column Settings and navigate to Double Column VC
//
func checkMainVCViewStatusAndNavigateAcordingly(){
if UserDefaults.standard.integer(forKey: KEY_MAIN_VC_VIEW) == 1{
//let appDel = UIApplication.shared.delegate as! AppDelegate
//appDel.goToDoubleMainVC()
let mainVC = storyboard?.instantiateViewController(withIdentifier: "DoubleColumnMainVC") as! DoubleColumnMainVC
self.navigationController?.viewControllers[0] = mainVC
//navigationController?.pushViewController(mainVC, animated: false)
var navigationArray = self.navigationController?.viewControllers
print("Number of VCs = \(String(describing: navigationArray?.count))")
if navigationArray?.count == nil{
self.navigationController?.pushViewController(mainVC, animated: false)
}else{
self.navigationController?.popToRootViewController(animated: false)
}
// self.navigationController?.viewControllers = navigationArray!
}
}
//
// same as function above but goes to MainVC
//
func checkDoubleColumnMainVCViewStatusAndNavigateAcordingly(){
if UserDefaults.standard.integer(forKey: KEY_MAIN_VC_VIEW) == 0{
// let appDel = UIApplication.shared.delegate as! AppDelegate
// appDel.goToMainVC()
let mainVC = storyboard?.instantiateViewController(withIdentifier: "MainVC") as! MainVC
self.navigationController?.viewControllers[0] = mainVC
var navigationArray = self.navigationController?.viewControllers
print("Number of VCs = \(String(describing: navigationArray?.count))")
if navigationArray?.count == nil{
navigationController?.pushViewController(mainVC, animated: false)
}else{
self.navigationController?.popToRootViewController(animated: false)
}
// self.navigationController?.viewControllers = navigationArray!
}
}
在这两个控制器的 ViewWillAppear 中,我调用这些函数进行相应的切换。
任何想法我做错了什么?我可以从 UITabBarController 而不是 NavigationController 推送控制器吗?类似:
tabBarController.pushViewController(mainVC, animated: false)
代替:
navigationController.pushViewController(mainVC, animated: false)
提前谢谢你
更新:
在我最好的情况下,当一切正常时,在第一次启动应用程序时(到第二个 mainVC)NavBar 中的 Buttons 不起作用。
编辑:
我刚刚意识到我在SecondMainVC 上方看到的NavigationBar 是来自MainVC 的NavigationBar,这就是按钮不起作用的原因。这怎么可能?
【问题讨论】:
-
首先你不能从 tabBarController 推送控制器。相反你可以使用 tabBarController.selectedIndex = 1 设置一个特定的 viewController 来切换
-
@Vikky 如果我做对了,如果
selectedIndex表示我的一个 VC 则不起作用,因为第一个选项卡是MainVC,第二个是CategoriesVC,第三个是 @987654344 @。因为我在另一个选项卡中没有我的SecondMainVC,所以我只想有条件地在第一个选项卡上显示另一个 VC。我做对了吗?你明白我的意思了吗? -
您提供的图像非常模糊,因此很难从中进行检查。现在回到您的问题,是的,您说对了。现在,如果您想在第一个选项卡中打开另一个 VC,您必须以编程方式替换您的视图控制器。
-
@Vikky 我会尝试更改图片,但我不知道如何使用选定的索引来更改它,你能写一些代码吗?我也只是尝试直接分配VC,例如
tabBarController?.selectedViewController = mainVC但在启动时应用程序崩溃了。 -
@Vikky 照片变了,希望现在更好
标签: swift uinavigationcontroller uitabbarcontroller