Wie man eine Splitview ohne Interface Builder macht

Ich mag den Interface Builder nicht. Ich habe das Gefühl, dass der IB mit die Kontrolle über den Code zum Teil nimmt. Daher mache ich meine Projekte immer ohne den Interface Builder. Nun habe ich mein erstes iPad-Projekt mit einer Splitview ohne IB gestartet und möchte hier berichten, wie man das macht.
Zunächst starte ich ein neues iPad-Projekt mit einer Splitview.


Ich habe mein Projekt SplitView genannt. Zunächst lösche ich alle IB-Dateien.

Nun öffne ich die SplitView-Info.plist indem ich draufklicke und lösche den Eintrag Main nib file base name, da ich ja kein nib-File mehr habe.

Damit nun das Programm weiss, wo es starten soll muss ich nun noch die Datei main.m editieren. Die Datei sollte im Anschluss so aussehen.

#import 

int main(int argc, char *argv[]) {
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    int retVal = UIApplicationMain(argc, argv, nil, @"SplitViewAppDelegate");
    [pool release];
    return retVal;
}

Jetzt muss ich noch die Initialisierungen vornehmen, die ursprünglich in den Nibs vorgenommen wurden. Das mache ich in application:didFinishLaunchingWithOptions::

- (BOOL)application:(UIApplication *)application 
      didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    
    
        window = [[UIWindow alloc] initWithFrame: [[UIScreen mainScreen] bounds]];
	
	// detailViewController fuer das View auf der rechten Seite
	detailViewController = [[DetailViewController alloc] init];
	
	// rootViewController fuer das View auf der linken Seite
	rootViewController = [[RootViewController alloc] 
                                         initWithStyle:UITableViewStylePlain];
    
	// der rootViewController erhaelt einen Link zur detailViewController, 
        // damit eine Auswahl im rootView eine Auswirkung auf den detailView haben kann.
	rootViewController.detailViewController = detailViewController;
	
	// der rootViewController wird in einen navigationController eingebettet
	UINavigationController *navigationController = [[UINavigationController alloc] 
					initWithRootViewController: rootViewController];
	
	splitViewController = [[UISplitViewController alloc] init];
	
	// die property viewControllers des splitViewController muss genau zwei 
        // viewController enthalten: den fuers rechte View und den fuers linke View
	splitViewController.viewControllers = [NSArray arrayWithObjects: 
                 navigationController, detailViewController, nil];
	
        [navigationController release];

	// Aenderungen der Orientierung des iPad werden dem detailViewController mitgeteilt
	splitViewController.delegate = detailViewController;
	
        // Add the split view controller's view to the window and display.
        [window addSubview:splitViewController.view];
        [window makeKeyAndVisible];
    
        return YES;
}

Jetzt muss ich auch noch den DetailViewController anpassen. Folgenden Code muss ich in DetailVeiwController.m hinzufügen:

- (id)init {
	if (self = [super init]) {
		// das Lable zeigt an, was im rootView ausgewaehlt wurde
		detailDescriptionLabel = [[UILabel alloc] 
                              initWithFrame: CGRectMake(20, 400, 700, 30)];
		detailDescriptionLabel.text = @"Test";
		detailDescriptionLabel.textAlignment = UITextAlignmentCenter;
		[self.view addSubview: detailDescriptionLabel];
		
		// wir brauchen eine toolbar fuer den Portrait-Modus
		toolbar = [[UIToolbar alloc] initWithFrame: CGRectMake(0, 0, 768, 44)];
		toolbar.autoresizingMask = UIViewAutoresizingFlexibleWidth;
		
		// die toolbar braucht noch ein Array fuer die barButtonItems
		NSArray *itemsArray = [[NSArray alloc] init];
		toolbar.items = itemsArray;
		[itemsArray release];
		
		// nun wird die toolbar zum View hinzugefuegt
		[self.view addSubview: toolbar];
		
		self.view.backgroundColor = [UIColor whiteColor];
	}
	return self;
}

Und jetzt kann ich nach Belieben die View bearbeiten ohne den Interface Builder zu bemühen.
Ich hoffe, diese Anleitung ist auch für Euch von Nutzen.

This entry was posted in iOS-Entwicklung and tagged , , , , . Bookmark the permalink.