UIModalPresentationStyle.CurrentContext Swift iOS 7

Quiero mostrar una Vista – PresentedView sobre otra vista – Background View usando iOS 7. En mi aplicación, estoy usando UITabBArController , así que en el time de ejecución no sé qué vista sería la vista de background ( podría ser cualquiera de la barra de tabs artículos ) A continuación se muestra la estructura:

 UITabBarController ---> TabItem1 - FirstUIViewController ---> TabItem2 - SecondUIViewController ---> TabItem3 - ThirdUIViewController 

Necesita algo así:

introduzca la descripción de la imagen aquí

Cuando la aplicación se carga, estoy en TabItem1 - FirstUIViewController . Cuando hago clic en TabItem3 , quiero que ThirdUIViewController aparezca en la parte superior de FirstUIViewController y 'FirstUIViewController' debería aparecer en segundo plano sin habilitar la interacción del usuario.

Lo que hice hasta ahora:

  1. Dado que, UIViewControllers se agregan como Relationship Controllers para aparecer como TabBar Item en `UITabBarController, agregué una segue desde tabbarcontroller a ThridViewController.

  2. Cambió PresentationStyle para este Segue a UIModalPresentationStyle.CurrentContext e hizo la modificación siguiente

     func `viewDidLoad()` { super.viewDidLoad() self.performSegue("identifier", sender: self) } 

No pasa nada y solo veo 'ThridViewController' con background blanco

  1. Probé el enfoque de encoding manual:

     func `viewDidLoad()` { super.viewDidLoad() let overlayController:UIThirdViewController = UIThirdViewController() //This controller has a view added on top of it, which covers top half screen only overlayController.modalPresentationStyle = UIModalPresentationStyle.CurrentContext self.presentViewController(overlayController, animated: true, completion: nil) } 

Ningún cambio. Nueva vista anula la vista previa. si agrego este overlayController.view.backgroundColor = UIColor.clearColor() , veo la mitad de la pantalla negra y la mitad que contiene mi nueva vista

Puntos de problema:

  1. ¿Dónde debo escribir el código para inicializar / llamar a ThirdViewController para que aparezca en la parte superior de la vista actual?
  2. ¿Cómo solucionar el problema de la pantalla negra y hacer que funcione en iOS 7?

Estoy usando Xcode 7 y corriendo en iOS7. Por favor ayuda. Se agradecerá el fragment de código de trabajo. No publiques otras publicaciones de desbordamiento de stack como respuesta, a less que el código funcione y lo hayas intentado por tu count.

ACTUALIZACIÓN: – Con este enfoque, obtengo una pantalla negra

 class TabBarViewController: UITabBarController, UITabBarControllerDelegate { override func viewDidLoad() { super.viewDidLoad() self.delegate = self } func tabBarController(tabBarController: UITabBarController, shouldSelectViewController viewController: UIViewController) -> Bool { let switchController:UIViewController = SwitchViewController() self.presentingViewController?.modalPresentationStyle = UIModalPresentationStyle.CurrentContext self.presentingViewController?.view.backgroundColor = UIColor.clearColor() self.presentViewController(switchController, animated: true, completion: nil) return false } } 

Conviértalo en un controller de vista de contenedor personalizado ( Apple Docs ). Código de ejemplo de trabajo:

 class MyTabVC: UITabBarController, UITabBarControllerDelegate { override func viewDidLoad() { super.viewDidLoad() self.delegate = self } func tabBarController(tabBarController: UITabBarController, shouldSelectViewController viewController: UIViewController) -> Bool { presentThirdVC() return false } func presentThirdVC() { let myThirdVC = MyThirdVC.makeVC() myThirdVC.view.backgroundColor = UIColor.blackColor().colorWithAlphaComponent(0.1) addChildViewController(myThirdVC) var newFrame = CGRectInset(view.bounds, 0, 50) // hack, do what you want myThirdVC.view.frame = newFrame view.addSubview(myThirdVC.view) didMoveToParentViewController(myThirdVC) } } class MyThirdVC: UIViewController { class func makeVC() -> MyThirdVC { return UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("myThirdVC") as! MyThirdVC } } 

Captura de pantalla:

introduzca la descripción de la imagen aquí

Debería UITabBarController y agregarlo a la subclass personalizada. Establezca el delegado UITabBarController como self y luego, cuando se UITabBarController el índice específico en lugar de permitirle cambiar las tabs, se presenta de forma modal el menu. Los methods UITabBarControllerDelegate le darán la oportunidad de hacerlo.

Específicamente usando este método delegado …

 - tabBarController:shouldSelectViewController: 

Puede presentar el menu cuando se invoca esta pestaña y devolver NO. Solo tienes un viewController en blanco para esta pestaña ya que nunca se mostrará al usuario.

Para la transición en sí, recomiendo utilizar una subclass de UIPresentationController para configurar el marco de vistas del contenedor un poco más pequeño que el tamaño de la pantalla, y agregar una "dimmingView". Esto solo está disponible en iOS8, por lo que si quieres iOS7, tendrás que hacer más cosas de hackers.