隐藏UITabBarController的tabBarItem,同时能够显示相关视图

时间:2017-09-26 13:09:01

标签: ios swift uitabbarcontroller swrevealviewcontroller xcode9

我正在尝试为我的iPhone" Tabbed App"创建导航。其中包括(显然)UITabBarControllerSWRevealViewController用于显示侧边菜单。

我的应用程序中的所有视图必须显示UITabBarControllerUINavigationBar,但是,左侧菜单中显示的链接(由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中的项目,但仍然可以从我的侧边菜单中引用它(并打开它)?

更新
我的故事板目前看起来像这样:enter image description here

1 个答案:

答案 0 :(得分:1)

使用“菜单”操纵标签可能不是一个好主意 - 这就是Apple为更多...和编辑...功能设计的。

根据您的整体设计/导航/用户体验流程,有两个合理的选项:

  1. 而不是替换当前选中的标签,.present模态视图控制器,使用“取消”或“保存”或“完成”按钮来.dismiss它(不管是什么适当的) )。

  2. 由于您声明每个Tab的ViewController是一个NavigationController,您可以.push将菜单选择的视图控制器放到当前堆栈上。然后您的界面可以使用标准的“< Back”按钮导航。

  3. 祝你好运:)