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

¿Fue útil?

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;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top