2013-02-07 17 views
6

Ich möchte eine benutzerdefinierte Navigationsleiste wie in der BestBuy App oder wie in der folgenden Screenshot dargestellt.Wie erstelle ich eine benutzerdefinierte Navigationsleiste wie die BestBuy App?

enter image description here

Ich mag diese Art der Navigation immer auf der Spitze eines jeden Viewcontroller sein.

Wenn jemand mir sagen kann, würde die Prozedur oder jede Art von Hilfe geschätzt werden. Vielen Dank.

+0

Ich glaube nicht hinzufügen sie benutzerdefinierte Navigationsleiste verwenden ... es ist einfach Bild :) – NSCry

+0

sie wahrscheinlich nicht tun .. Ich bin damit einverstanden. Meine Antwort ist Overkill für diese .. es ist sehr flexibel, aber Aziz Code sieht besser geeignet für DIESE denke ich. .. obwohl ich nicht über die Hintergrundtrennzeichen weiß –

Antwort

11

Schreiben Sie eine Unterklasse von UINavigationBar, in der Sie benutzerdefinierte Zeichnungen erstellen und nach Bedarf Unteransichten hinzufügen.

dann informieren Sie Ihre Navigation diese Klasse zu verwenden, indem es Initing mit initWithNavigationBarClass:toolBarClass:

z.B.

@interface MyBar : UINavigationBar 
@end 

@implementation MyBar 
.... //like any UIView 
@end 

UINavigationController *navi = [[UINavigationController alloc] initWithNavigationBarClass:[MyBar class] toolbarClass:nil]; 

statt initWithRootViewController


Probe

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
// Override point for customization after application launch. 
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) { 
    self.mainViewController = [[FDMainViewController alloc] initWithNibName:@"FDMainViewController_iPhone" bundle:nil]; 
} else { 
    self.mainViewController = [[FDMainViewController alloc] initWithNibName:@"FDMainViewController_iPad" bundle:nil]; 
} 

UINavigationController *navi = [[UINavigationController alloc] initWithNavigationBarClass:[UINavigationBar class] toolbarClass:nil]; 
navi.viewControllers = @[self.mainViewController]; 
self.window.rootViewController = navi; 
[self.window makeKeyAndVisible]; 
return YES; 
} 
+0

Wie man navigationController erklärt, um diese Klasse zu benutzen? –

+0

siehe bearbeitete Antwort –

+0

Dann, wie werde ich den Root-Controller setzen? –

4

navigationbar drei Ansicht nehmen, zwei Tasten in jeder Seite links und rechts, können Sie auch hinzufügen eine Ansicht für den Titel ,,

//this will set a background image to your navigation bar. 
[[self.navigationController navigationBar] setBackgroundImage:[UIImage imageNamed:@"top-bar.png"] forBarMetrics:UIBarMetricsDefault]; 

UIButton *leftButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
[leftButton setBackgroundImage:[UIImage imageNamed:@"backBtn.png"] forState:UIControlStateNormal]; 
leftButton.frame = CGRectMake(0, 0, 66, 30); 
[leftButton addTarget:self action:@selector(navBack) forControlEvents:UIControlEventTouchUpInside]; 
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:leftButton]; 

UIImage *image=[UIImage imageNamed:@"add-btn.png"]; 
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; 
button.bounds = CGRectMake(0, 0, image.size.width, image.size.height); 
[button setBackgroundImage:image forState:UIControlStateNormal]; 
[button addTarget:self action:@selector(doneAct) forControlEvents:UIControlEventTouchUpInside]; 
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:button]; 

und die Suchleiste

self.navigationItem.titleView = mySearchbarView; 
+0

ja, wenn Sie die Separatoren nicht brauchen zum Beispiel ... obwohl diese im Hintergrundbild sein könnten .. dies funktioniert in den meisten Fällen –

+0

sicher, aber dann wird die Schaltfläche nicht auf Berührung markiert werden, ist Ihre Antwort besser zu gehen mit. – Aziz

+0

danke, habe das nicht gesehen .. –

Verwandte Themen