5

Para establecer la escena que tengo:UISplitViewControllers, 1 (Compartido) Detallado

  • Una vista de pestaña Controlador con 2 pestañas
  • Cada pestaña tiene una vista dividida controlador
  • me gustaría señale la vista de Detalle de cada Controlador de vista dividida a la MISMA vista.

He adjuntado un muy simple sample project showing the issue.

Ejecútelo en el iPad 5.1 Sim, observe cada pestaña. Uno muestra la vista de detalle compartida, uno falla.

NSLog depuración informa que la segunda vista dividida tiene un controlador NULL vista de detalle:

 
2012-04-28 07:21:55.451 svcTest[14597:f803] tabBarController viewControllers = (
    "UISplitViewController: 0x6a36100", 
    "UISplitViewController: 0x6a39ab0" 
) 
2012-04-28 07:21:55.455 svcTest[14597:f803] svcA.viewControllers = (
    "UINavigationController: 0x6a36250", 
    "UIViewController: 0x6a38720" 
) 
2012-04-28 07:21:55.457 svcTest[14597:f803] svcB.viewControllers = (
    "UINavigationController: 0x6a39cc0" 
) 

Al hacer clic en la segunda pestaña obtiene este error:

2012-04-28 07:22:58.457 svcTest[14597:f803] Splitview controller is expected to have a detail children before its used! 
2012-04-28 07:22:58.459 svcTest[14597:f803] Split view controller should have its children set before layout!

Mirando el guión gráfico que tengo Ya configuré las vistas detalladas, así que esto realmente me confunde.

Storyboard

Cualquier ayuda para conseguir esta visión 'compartida' para aparecer en cada ficha es muy apreciado.

Gracias!

Respuesta

1

I recibieron la misma advertencia cuando se especifica más de dos viewControllers para el splitViewController como se muestra a continuación:

self.splitViewController.viewControllers = @[masterNavigationController, detailNavigationController, subViewController]; 

cuando quité 'subViewController' de la matriz de la advertencia desapareció.

Después de leer la documentación de la manzana en la adición/eliminación subvistas se menciona lo siguiente:

The array in this property must contain exactly two view controllers. The view controllers are presented left-to-right in the split view interface when it is in a landscape orientation. Thus, the view controller at index 0 is displayed on the left side and the view controller at index 1 is displayed on the right side of the interface.

Se puede extraer el enlace a UISplitViewController Class Reference para más información.

1

el problema está en la colocación de algunas líneas ubicadas en de -applicationdidFinishLaunchingWithOptions:

Aquí, el controlador de la vista dividida delegado se establece antes de que los viewControllers App Delegado. Este parece ser el origen del problema y si invierte las dos líneas como se muestra a continuación el mensaje de advertencia desaparece:

utilizar este código en su lugar:

self.splitViewController = [[UISplitViewController alloc] init]; 
self.splitViewController.viewControllers = [NSArray 
          arrayWithObjects:masterNavigationController, 
          detailNavigationController, nil]; 
self.splitViewController.delegate = detailViewController; 

Para una explicación detallada, se puede echar un vistazo a : Splitview Controller Is Expected to Have a Master View Controller

+0

Gracias por su sugerencia. No vi desaparecer la advertencia moviendo .delegate después de la asignación .viewControllers, pero en mi caso pude arreglarlo moviendo algunas propiedades que estaba configurando después de .viewControllers (en particular preferredDisplayMode, preferredPrimaryColumnWidthFraction ...). Estoy escribiendo sobre iOS 9.3. – ggould75

Cuestiones relacionadas