[英]Present a View Controller modally from a tab bar controller
我想用相机构建一个视图。 就像 Instagram 一样,中间有一个按钮,用户可以点击它并显示相机视图。 我在AppDelegate
为TabViewController
实现了一个代码,但没有任何反应,没有动画或新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
}
这是我的故事板:
有什么想法吗?
我建议为您的 TabBarController 创建一个自定义类,然后将委托分配给它。
您可以分配和检查视图控制器的restorationIdentifier
,或者进行类型检查。 我通常使用故事板标识符作为视图控制器的恢复标识符。
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
}
}
这是您可以使用的示例: https : //gist.github.com/emrekyv/3343aa40c24d7e54244dc09ba0cd95df
我刚刚尝试过,它对我来说非常有效:
为您的 TabBarController 创建一个自定义类,并将其分配给 Storyboard 中的控制器。
之后覆盖 tabBarController 的 didSelect 并在那里编写您的演示文稿代码:
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
}
}
希望有帮助!!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.