Domanda

Ho un'applicazione che sta per navigare ad un'UISplitView (all'interno di un altro vista del tutto) in questo modo:

- (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];
    }
}

che viene fatto sulla schermata di navigazione principale

Ora, la MyDayController ha un XIB chiamato MyDay.xib che ha questi elementi:

  

del file Proprietario: MyDayController

     

First Responder: UIResponder

     

Split View Controller

 ---->Navigation Controller

         ---->Navigation Bar

         ----> Table View Controller

                 ----> Navigation Item

 ---->View Controller

Così, ho bisogno di alcuni più componenti qui, ho bisogno di un UITableViewController e UISplitViewControllerDelegate corretta?

I stava per implementare solo questi protocolli nel mio MyDayController, è questa sorta di standard?

Così, dopo il codice di cui sopra, ottengo un errore:

- [UIViewController _loadViewFromNibNamed: bundle:]. Caricato il pennino "MyDay", ma la presa di vista non è stato impostato

così, come posso risolvere il problema utilizzando l'UISplitViewController? So che l'UISplitViewController ha una proprietà di vista, ma non posso usarlo / collegarlo in IB posso?

Grazie mille

Mark

È stato utile?

Soluzione

Non si dovrebbe avere a sottoclasse UISplitViewController. Quello che il comportamento è nella tua classe "MyDayController"? UISplitViewController fondamentalmente solo maniglie ponendo il punto di vista principali e di dettaglio per voi, quindi la vostra responsabilità è dare attuazione a tali controllori.

Se la vista divisione è al livello più alto della vostra applicazione, è possibile aggiungerlo alla finestra principale di pennino vostra applicazione. Se non lo è, basta creare programatically:

- (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];
}

È inoltre non è necessario il test per self.myDayController.view.superview == nil come è implicito nella self.myDayController == nil

Altri suggerimenti

Grazie Christopher Pickslay. Questa soluzione funziona per me, ma devo aggiustare qualcosa che hai dato. Si prega di vedere il mio codice qui sotto.

file delegato

- (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;
}

Spero che questo aiuti.

se si desidera creare con controller di navigazione sia in master e dettagli allora si può fare questo

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;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top