隐藏 UITabBarController 的 tabBarItem,同时仍然能够显示关联的视图
Hiding UITabBarController's tabBarItem while being able to show associated view nevertheless
我正在尝试为我的 iPhone "Tabbed App" 创建一个导航,其中包括(显然)UITabBarController
和 SWRevealViewController
以显示侧边菜单。
我的应用程序中的所有视图 必须 同时显示 UITabBarController
和 UINavigationBar
,但是 link 出现在左侧-侧面菜单(由 SWRevealViewController
处理)不得 出现在 UITabBarController
.
中
我的左侧菜单link是这样处理的:
import UIKit
class MenuTableViewController: UITableViewController {
override func viewDidLoad() {
super.viewDidLoad()
self.clearsSelectionOnViewWillAppear = false
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let selectedIndex = (indexPath as NSIndexPath).row + 1 // hardcoded for time being
let tabBarController = revealViewController().frontViewController as! UITabBarController
let navController = tabBarController.viewControllers![selectedIndex] as! UINavigationController
navController.popToRootViewController(animated: true)
tabBarController.selectedIndex = selectedIndex
revealViewController().pushFrontViewController(tabBarController, animated: false)
}
}
现在,我尝试删除我不想在 UITabBarController
中显示的其中一个视图的 link,如下所示:
import UIKit
class TabBarController: UITabBarController {
override func viewDidLoad() {
super.viewDidLoad()
let index = 2 // hardcoded for time being
viewControllers?.remove(at: index)
}
}
但是如果我现在点击左侧菜单中的关联 link,我会得到一个 NSRangeException index 2 beyond bounds [0 .. 1]
错误(当然,因为我从 [=12= 中删除了特定的 tabBarItem
]).
我的问题是:如何 "hide" 来自 UITabBarController
的项目,但仍然能够从我的侧面菜单中引用它(并打开它)?
更新
我现在的故事板是这样的:
使用 "menu" 来操作选项卡可能不是一个好主意 - 这就是 Apple 设计更多...和编辑...功能的目的。
根据您的总体设计/导航/用户体验流程,两个合理的选择是:
不是替换当前选定的选项卡,而是 .present
模态视图控制器,使用 "Cancel" 或 "Save" 或 "Done" 按钮 .dismiss
它(任何合适的)。
由于您声明每个选项卡的 ViewController 是一个 NavigationController,因此您可以 .push
将菜单选择的视图控制器添加到当前堆栈中。然后您的界面可以使用标准的“<返回”按钮导航。
祝你好运:)
我正在尝试为我的 iPhone "Tabbed App" 创建一个导航,其中包括(显然)UITabBarController
和 SWRevealViewController
以显示侧边菜单。
我的应用程序中的所有视图 必须 同时显示 UITabBarController
和 UINavigationBar
,但是 link 出现在左侧-侧面菜单(由 SWRevealViewController
处理)不得 出现在 UITabBarController
.
我的左侧菜单link是这样处理的:
import UIKit
class MenuTableViewController: UITableViewController {
override func viewDidLoad() {
super.viewDidLoad()
self.clearsSelectionOnViewWillAppear = false
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let selectedIndex = (indexPath as NSIndexPath).row + 1 // hardcoded for time being
let tabBarController = revealViewController().frontViewController as! UITabBarController
let navController = tabBarController.viewControllers![selectedIndex] as! UINavigationController
navController.popToRootViewController(animated: true)
tabBarController.selectedIndex = selectedIndex
revealViewController().pushFrontViewController(tabBarController, animated: false)
}
}
现在,我尝试删除我不想在 UITabBarController
中显示的其中一个视图的 link,如下所示:
import UIKit
class TabBarController: UITabBarController {
override func viewDidLoad() {
super.viewDidLoad()
let index = 2 // hardcoded for time being
viewControllers?.remove(at: index)
}
}
但是如果我现在点击左侧菜单中的关联 link,我会得到一个 NSRangeException index 2 beyond bounds [0 .. 1]
错误(当然,因为我从 [=12= 中删除了特定的 tabBarItem
]).
我的问题是:如何 "hide" 来自 UITabBarController
的项目,但仍然能够从我的侧面菜单中引用它(并打开它)?
更新
我现在的故事板是这样的:
使用 "menu" 来操作选项卡可能不是一个好主意 - 这就是 Apple 设计更多...和编辑...功能的目的。
根据您的总体设计/导航/用户体验流程,两个合理的选择是:
不是替换当前选定的选项卡,而是
.present
模态视图控制器,使用 "Cancel" 或 "Save" 或 "Done" 按钮.dismiss
它(任何合适的)。由于您声明每个选项卡的 ViewController 是一个 NavigationController,因此您可以
.push
将菜单选择的视图控制器添加到当前堆栈中。然后您的界面可以使用标准的“<返回”按钮导航。
祝你好运:)