我正在尝试为我的iPhone" Tabbed App"创建导航。其中包括(显然)UITabBarController
和SWRevealViewController
用于显示侧边菜单。
我的应用程序中的所有视图必须显示UITabBarController
和UINavigationBar
,但是,左侧菜单中显示的链接(由SWRevealViewController
处理)不得出现在UITabBarController
。
我的左侧菜单链接以这种方式处理:
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
中显示的观看内容的链接,如下所示:
import UIKit
class TabBarController: UITabBarController {
override func viewDidLoad() {
super.viewDidLoad()
let index = 2 // hardcoded for time being
viewControllers?.remove(at: index)
}
}
但如果我现在点击左侧菜单中的相关链接,我会收到NSRangeException index 2 beyond bounds [0 .. 1]
错误(当然,因为我从tabBarItem
删除了特定UITabBarController
)。
我的问题是:我怎样才能隐藏" UITabBarController
中的项目,但仍然可以从我的侧边菜单中引用它(并打开它)?
答案 0 :(得分:1)
使用“菜单”操纵标签可能不是一个好主意 - 这就是Apple为更多...和编辑...功能设计的。
根据您的整体设计/导航/用户体验流程,有两个合理的选项:
而不是替换当前选中的标签,.present
模态视图控制器,使用“取消”或“保存”或“完成”按钮来.dismiss
它(不管是什么适当的) )。
由于您声明每个Tab的ViewController是一个NavigationController,您可以.push
将菜单选择的视图控制器放到当前堆栈上。然后您的界面可以使用标准的“< Back”按钮导航。
祝你好运:)