TabBarController y SplitViewController

Quiero que mi splitviewController se muestre dentro de un TabBarController . Desafortunadamente, primero decidí tener un SplitViewController y elegir la plantilla de Apple. Ahora estoy en la position inconveniente de no saber cómo agregarlo a una barra de tabs.

Probé varias cosas que se explicaron aquí en StackOverflow pero el mejor resultado fue una pantalla negra con una barra de tabs debajo 🙁

Solo estoy luchando por encontrar una manera agradable y simple.

Código de mi Appdelegate :

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. // Add the split view controller's view to the window and display. self.window.rootViewController = self.splitViewController; [self.window makeKeyAndVisible]; NSArray *searchPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); documentFolderPath = [searchPaths objectAtIndex: 0]; self.rootViewController.directoryPath = documentFolderPath; NSURL *docUrl = [launchOptions objectForKey:UIApplicationLaunchOptionsURLKey]; if ([docUrl isFileURL]) { NSString *path = [docUrl path]; self.detailViewController.currentFilePath = path; [self.detailViewController setDetails:path newFile:FALSE]; } return YES; 

De la documentation de Apple esta no es una situación.

Pero hay una forma de lograr esto fácilmente (lo hicimos para una aplicación).

eche un vistazo a http://www.codeworth.com/blog/mobile/ios-splitviewcontroller-inside-tabviewcontroller/

Creo que esta sería la respuesta adecuada para la pregunta.

Debería comprobar que IntelligentSplitViewController es todo lo que necesita.

Agregando algunos controlleres y layouts, puede terminar con algo como esto:

Captura de pantalla de una aplicación para iPad con IntelligentSplitViewController

PS : De hecho, tengo una aplicación en la App Store con este controller, ¡así que ve a la cabeza!

Editar:

Acabo de darme count de que realmente quería una vista dividida dentro de la barra de tabs. Según la documentation de Apple, este es un no no. http://developer.apple.com/library/ios/#featunetworkingarticles/ViewControllerPGforiPhoneOS/iPadControllers/iPadControllers.html

Un controller de vista dividida debe ser siempre la raíz de cualquier interfaz que crees. En otras palabras, siempre debe instalar la vista desde un object UISplitViewController como la vista raíz de la window de su aplicación. Los paneles de su interfaz de vista dividida pueden contener controlleres de navigation, controlleres de barra de tabs o cualquier otro tipo de controller de vista que necesite para implementar su interfaz.


Si aún desea utilizar una barra de tabs, las cosas que escribí a continuación todavía se aplican, pero su subvista no debe ser un controller de vista dividida.

respuesta original:

creará el controller de barra de tabulación en el código y luego agregará el controller de splitview como una de las tabs. En su caso, self.splitViewController se convertirá en uno de los controlleres de vista dentro de su controller de barra de tabs. No he intentado esto usando una aplicación de plantilla de Apple como punto de partida, pero darlo debería funcionar.

Puede search tutoriales en uitabbarcontroller para get más información. Este parece prometedor: http://www.xcode-tutorials.com/uitabbarcontroller-and-uinavigationcontroller/

Y esto también es útil: http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UITabBarController_Class/Reference/Reference.html

aquí hay una muestra:

  - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. UITabBarController *tabBarController = [[UITabBarController alloc] init]; //set tbconroller as root view controller of window [self.window setRootViewController:tabBarController]; //window retains controller so we can release [tabBarController release]; //create two view controllers UIViewController *vc1 = [[HypnosisViewController alloc] init]; UIViewController *vc2 = [[CurrentTimeViewController alloc] init]; //make an array containing these two view controllers NSArray *viewControllers = [NSArray arrayWithObjects:vc1,vc2,nil]; [tabBarController setViewControllers:viewControllers]; //the views are retained their new owners, so we can release [vc1 release]; [vc2 release]; [[self window] makeKeyAndVisible]; return YES; } 

si está utilizando el creador de interfaces, aquí hay algunos tutoriales más http://www.cimgf.com/2009/06/25/uitabbarcontroller-with-uinavigationcontroller-using-interface-builder/ o http: //www.mobisoftinfotech .com / blog / iphone / iphone-tabbar-uitabbarcontroller-tutorial /

Acabo de resolver este problema, ya que se ha estado ejecutando en mi cabeza durante los últimos días. Puede tener tantas "vistas divididas" como desee dentro de un "UITabbarView" o vars versa, sin usar ningún código, pero si desea satisfacer a Apple y hacer que el controller de vista Split sea el controller raíz, debe escribir una línea de codigo

Entonces, la carne está aquí.

  1. Cree un proyecto de vista única o lo que quiera.
  2. En el panel de guiones principal arrastre y suelte el controller de vista dividida.
  3. Arrastre la flecha de initialization desde el "controller de vista única" y nómbralo a su "controller de vista dividida".
  4. Ahora, si ejecuta su proyecto, debe cargar la vista dividida.
  5. Cree una nueva subclass de file de coca touch de "UISplitViewController", llámela como prefiera.
  6. En "viewDidLoad" agregue la siguiente línea "self.prefernetworkingDisplayMode = .PrimaryHidden" // solo para ocultar la vista maestra
  7. De nuevo en el guión gráfico principal, select el controller de la vista dividida y haga que sea el controller de la vista el que acaba de crear.
  8. Ahora, borre la "Vista" del controller de vista de detalles (solo la vista)
  9. Busque la "vista de contenedor" en la biblioteca de objects, arrástrela y suéltela en el controller de vista de detalles.
  10. Esto generará el controller de vista conectado a la "Vista de contenedor". Incruste el controller de vista generado en "Controlador de barra de pestaña". Ahora, tiene Vista dividida conectada al controller de barra de tabs.
  11. Su TabBarController debe tener un controller de vista (elemento 1), replace la "vista" (única vista) de este controller con "ContainerView".
  12. Ahora arrastre y suelte el nuevo controller de vista dividido desde la "Biblioteca de objects". Conecte el "ContenedorView" en "Elemento 1" al nuevo "Controlador de vista dividido" agregado.
  13. Ahora, si restring que debemos tener un controller de vista colgando en algún lugar, ya que creamos un proyecto de vista única, busque que el controller lo conecte al controller de la barra de tabs, por lo que ahora tiene 2 elementos.
  14. Repita el mismo process, reemplace la vista con "vista de contenedor" y agregue nuevo controller de vista dividida y conéctelo a estas tablas de historia.

Ahora, este Storyboard final debería verse así. De nuevo, no tiene que comenzar desde el controller de vista Split, pero lo hice solo para coincidir con la recomendación de Apple.

introduzca la descripción de la imagen aquí

introduzca la descripción de la imagen aquí