MoreNavigationController verändern

From macwrench
Jump to navigation Jump to search

Bekanntermaßen wird in in einer iPhone Applikation, die einen UITabBarController verwendet, ab einer Anzahl von mehr als 5 Tabs ein "moreController" hinzugefügt. Dieser besteht im Prinzip aus nichts weiterem als einer automatisch generierten UITableView, die alle weiteren ViewController der Tab-Bar enthält und deren Darstellungsreihenfolge in der TabBar außerdem über einen weiteren ViewController verändert werden kann.

Von Haus aus bietet das iPhone SDK jedoch keinerlei Möglichkeiten, diesen Controller direkt zu verändern, allerdings ist auf "inoffiziellem" Wege doch einiges möglich.


  Gefahrenzeichen 16.svg
Wichtig: Die Verwendung der hier beschriebenen Vorgehensweisen erfolgt auf eigenes Risiko, da hier nicht öffentliche APIs verwendet werden, die sich in einer neuen iPhoneOS oder -SDK Version jederzeit ändern können und damit u.U. einen Absturz der App zur Folge haben.
 

Navigationbar style ändern

In der AppDelegate in der Methode

- (void)applicationDidFinishLaunching:(UIApplication *)application;

Kann mit folgendem Stück Code die Navigationbar geändert werden (der tabBarController muss natürlich als Property o.ä. ansprechbar sein):

UIView *views = [theTabBarController.view.subviews objectAtIndex:1];
UINavigationBar *navBar = [[views subviews] objectAtIndex:0];
navBar.barStyle = UIBarStyleBlack;

Zugriff auf den moreController

Über den tabBarController ist auch der Zugriff auf den moreController und dessen View möglich, was allerdings über eine private und undokumentierte Klasse namens UIMoreListController läuft:

UIMoreListController *moreController = [[tabBarController.moreNavigationController viewControllers] objectAtIndex:0];

Die View dieses Controllers ist dann eine gewöhnliche UITableView, die alle überzählichen ViewController des TabBarControllers enthält.

Auf diesem Weg lässt sich dann beispielsweise die Hintergrundfarbe der TableView ändern:

tabBarController.moreNavigationController.topViewController.view.backgroundColor = [UIColor colorWithRed:0.9373 green:0.9373 blue:0.9373 alpha:1.0000];

Siehe auch