【发布时间】:2019-01-09 09:29:09
【问题描述】:
在我的项目中,我有三个 tabBar 项目主页、通知和配置文件。侧面菜单控制器具有主页、预订、个人资料和注销功能。侧边栏菜单控制器是使用 SWRevealViewController cocopods 完成的。
当我将侧边栏菜单导航到主页选项卡栏索引时,已正确选择并正确导航。从预订导航时,它可以正确导航,但再次导航主页应用程序会崩溃。控制台输出显示无法将“UINavigationController”(0x10ef79420)类型的值转换为“UITabBarController”(0x10ef79970)。
由于预订控制器是自定义视图控制器,其余的是标签栏控制器。当导航到预订屏幕时,控制器标签栏应该被隐藏,用户再次点击菜单按钮并导航到主页或任何其他控制器。
并且由于预订控制器没有标签栏索引而崩溃。那么如何在不崩溃的情况下导航到具有选定索引项的自定义控制器和标签栏控制器。
这是我的截图:
我的故事板截图:
这是我尝试过的代码:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
// tableView.deselectRow(at: indexPath, animated: true)
let row = indexPath.row
if row == 0{
let tabBarController = revealViewController().frontViewController as! UITabBarController
let storyboard = UIStoryboard(name: "Home", bundle: nil)
let obj = storyboard.instantiateViewController(withIdentifier: "HomeViewController") as! HomeViewController
let navController = UINavigationController.init(rootViewController: obj)
tabBarController.selectedIndex = (indexPath as NSIndexPath).row
tabBarController.tabBar.isHidden = false
self.revealViewController().pushFrontViewController(tabBarController, animated: true)
} else if row == 1{
let tabBarController = revealViewController().frontViewController as! UITabBarController
let storyboard = UIStoryboard(name: "Bookings", bundle: nil)
let obj = storyboard.instantiateViewController(withIdentifier: "BookingsViewController") as! BookingsViewController
let navController = UINavigationController.init(rootViewController: obj)
// tabBarController.selectedIndex = 1
// tabBarController.tabBar.isHidden = false
self.revealViewController().pushFrontViewController(navController, animated: true)
} else if row == 2 {
let tabBarController = revealViewController().frontViewController as! UITabBarController
let storyboard = UIStoryboard(name: "Profile", bundle: nil)
let obj = storyboard.instantiateViewController(withIdentifier: "profileViewController") as! profileViewController
let navController = UINavigationController.init(rootViewController: obj)
tabBarController.selectedIndex = (indexPath as NSIndexPath).row
tabBarController.tabBar.isHidden = false
self.revealViewController().pushFrontViewController(tabBarController, animated: true)
} else if row == 3 {
print(indexPath)
// Log out user from Firebase
AuthService.signOut(onSuccess: {
// Present the Sign In VC
// PrefsManager.sharedinstance.logoutprefences()
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let signInVC = storyboard.instantiateViewController(withIdentifier: "signInViewController")
self.present(signInVC, animated: true)
// self.navigationController?.pushViewController(signInVC, animated: true)
}) { (errorMessage) in
ProgressHUD.showError(errorMessage)
}
}
}
【问题讨论】:
-
您是否需要
TabBar仅在Home部分? -
@VRAwesome 是的,我需要主页和个人资料屏幕中的 tabBar,而不是预订屏幕
-
可能的关注点是
revealViewController().frontViewController as! UITabBarController。似乎revealViewController().frontViewController可能是导航控制器,如上一个屏幕截图所示。为了帮助您调试,尝试打印revealViewController().frontViewController的类型,也许frontViewController不是您期望的控制器?
标签: ios swift uitableview uitabbarcontroller swrevealviewcontroller