¿Cómo se crea un UISplitView manualmente?
-
27-09-2019 - |
Pregunta
Tengo una aplicación que se va a navegar a un UISplitView (dentro de otra vista en total), así:
- (void) switchToMyDayView {
NSLog(@"Show My Day Screen");
if (self.myDayController.view.superview == nil) {
if (self.myDayController == nil) {
MyDayController *myController = [[MyDayController alloc] initWithNibName:@"MyDay" bundle:nil];
self.myDayController = myController;
[myController release];
}
[homeScreenController.view removeFromSuperview];
[self.view insertSubview:self.myDayController.view atIndex:0];
}
}
¿Qué se hace en la pantalla principal de navegación
Ahora, el MyDayController tiene una llamada XI ter MyDay.xib que tiene estos elementos:
El propietario del archivo: MyDayController
Primera Respuesta: UIResponder
Dividir vista controlador
---->Navigation Controller ---->Navigation Bar ----> Table View Controller ----> Navigation Item ---->View Controller
Por lo tanto, necesito un poco más componentes aquí, necesito un UITableViewController y una UISplitViewControllerDelegate correcta?
Me iba a poner en práctica estos protocolos solo en mi MyDayController, es este tipo de norma?
Así que, después de que el código anterior, me sale un error:
- [UIViewController _loadViewFromNibNamed: bundle:]. Cargado la punta "MyDay", pero la toma de vista no se estableció
así, ¿cómo puedo solucionarlo mediante el UISplitViewController? Yo sé que el UISplitViewController tiene una vista propiedad, pero no puedo usarlo / conectarlo en IB puedo?
Muchas gracias
Marcar
Solución
Usted no debería tener que subclase UISplitViewController. ¿Qué comportamiento es en su clase "MyDayController"? UISplitViewController básicamente sólo maneja trazar los puntos de vista maestra y detalle para usted, por lo que su responsabilidad es la de poner en práctica esos controladores.
Si la vista dividida está en el nivel superior de la aplicación, puede agregarlo a punta de la ventana principal de la aplicación. Si no es así, basta con crear mediante programación:
- (void) switchToMyDayView {
NSLog(@"Show My Day Screen");
if (self.myDayController == nil) {
YourMasterViewController *masterViewController = [[YourMasterViewController alloc] initWithNibName:@"MasterView" bundle:nil];
YourDetailViewController *detailViewController = [[YourDetailViewController alloc] initWithNibName:@"DetailView" bundle:nil];
UISplitViewController *myController = [[UISplitViewController alloc] init;
myController.viewControllers = [NSArray arrayWithObjects:masterViewController, detailViewController, nil];
[masterViewController release];
[detailViewController release];
self.myDayController = myController;
[myController release];
}
[homeScreenController.view removeFromSuperview];
[self.view insertSubview:self.myDayController.view atIndex:0];
}
También no es necesario para la prueba self.myDayController.view.superview == nil
ya que es implícito en self.myDayController == nil
Otros consejos
Gracias Christopher Pickslay. Esta solución funciona para mí, pero tengo que arreglar algo que le diste. Por favor vea mi código abajo.
archivo Delegado
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
LeftViewController *leftViewController = [[LeftViewController alloc] init];// initWithNibName:@"LeftViewController" bundle:nil];
RightViewController *rightViewController = [[RightViewController alloc] initWithNibName:@"RightViewController" bundle:nil];
UISplitViewController *myController = [[UISplitViewController alloc] init];
myController.viewControllers = [NSArray arrayWithObjects:leftViewController, rightViewController, nil];
self.window.rootViewController = myController;
[self.window makeKeyAndVisible];
return YES;
}
Espero que esto ayude.
Si desea crear con el control de navegación en el maestro y el detalle a continuación, puede hacer esto
self.rootViewController=[[RootViewController alloc]init];
self.detailViewController=[[FirstDetailViewController alloc]init];
UINavigationController *rootNav=[[UINavigationController alloc]initWithRootViewController:rootViewController];
UINavigationController *detailNav=[[UINavigationController alloc]initWithRootViewController:detailViewController];
self.splitViewController.viewControllers=[NSArray arrayWithObjects:rootNav,detailNav,nil];
self.splitViewController.delegate=self.detailViewController;