从标签栏控制器以模态方式呈现视图控制器

时间:2018-02-21 15:17:17

标签: ios swift uitabbarcontroller

我想用相机构建一个视图。像Instagram这样的东西,中间有一个按钮,用户可以点击并显示摄像机视图。 我在TabViewController中为AppDelegate实现了代码,但没有任何反应,没有动画或新ViewController的演示文稿。

这是我的AppDelegate:

import UIKit


class AppDelegate: UIResponder, UIApplicationDelegate, UITabBarControllerDelegate {
    var window: UIWindow?
    func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: ViewController) -> Bool {
    if viewController is ViewController {
        let storyboard = UIStoryboard(name: "Main.storyboard", bundle: nil)
        if let controller = storyboard.instantiateViewController(withIdentifier: "cameraVC") as? ViewController {
            controller.modalPresentationStyle = .fullScreen
            tabBarController.present(controller, animated: true, completion: nil)
        }
        return false
    }
    return true
}

这是我的故事板:

Main.storyboard

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

我建议为你的TabBarController创建一个自定义类,然后将委托分配给它。

您可以分配和检查视图控制器的class TabBarController: UITabBarController, UITabBarControllerDelegate { override func viewDidLoad() { super.viewDidLoad() self.delegate = self } func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool { if let identifier = viewController.restorationIdentifier, identifier == "cameraVC" { let vc = self.storyboard?.instantiateViewController(withIdentifier: "cameraVC") as! CameraViewController present(vc, animated: true, completion: nil) return false } return true } } ,也可以进行类型检查。我通常使用故事板标识符作为视图控制器的恢复标识符。

Voxels = Lines[0] | Lines[1]
Voxels = Voxels | Lines[2]
Voxels = Voxels | Lines[3]

以下是您可以使用的示例: https://gist.github.com/emrekyv/3343aa40c24d7e54244dc09ba0cd95df/edit

答案 1 :(得分:1)

我只是尝试过,它对我来说很有效:

为您的TabBarController创建一个Custom类,并将其分配给Storyboard中的Controller。

在覆盖后选择了tabBarController,并在那里编写你的演示代码:

override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {

      if let controller = self.viewControllers?[self.selectedIndex] as? ViewController {

          controller.modalPresentationStyle = .fullScreen
          self.present(controller, animated: true, completion: nil
       }
}

希望它有所帮助!!