2013-02-07 5 views
6

Voglio creare una barra di navigazione personalizzata come nell'app BestBuy o come mostrato nello screenshot qui sotto.Come creare una barra di navigazione personalizzata come l'app BestBuy?

enter image description here

voglio questo tipo di navigazione per essere sempre sulla parte superiore di ogni viewController.

Se qualcuno può dirmi che la procedura o qualsiasi tipo di aiuto sarebbe apprezzato. Grazie.

+0

Non credo che stanno utilizzando barra di navigazione personalizzata ... è semplice immagine :) – NSCry

+0

che probabilmente non .. Io sono d'accordo. la mia risposta è esagerata per questo .. è più flessibile ma il codice di Aziz sembra più adatto per QUESTO penso. .. anche se non conosco i separatori di sfondo –

risposta

11

scrivere una sottoclasse di UINavigationBar in cui si esegue il disegno personalizzato e si aggiungono le visualizzazioni secondarie secondo necessità.

allora informi il navigationController di utilizzare tale classe initing utilizzando initWithNavigationBarClass:toolBarClass:

esempio

@interface MyBar : UINavigationBar 
@end 

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

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

invece di initWithRootViewController


Esempio

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

Come dire a navigationController di usare quella classe? –

+0

vedi risposta modificata –

+0

Quindi come imposterò il controller di root? –

4

navigationBar può prendere tre vista, due pulsanti in ogni lato a destra ea sinistra, anche è possibile aggiungere una vista per il titolo ,,

//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]; 

e di aggiungere la barra di ricerca

self.navigationItem.titleView = mySearchbarView; 
+0

sì, se non hai bisogno dei separatori per esempio ... anche se potrebbero essere nell'immagine di sfondo .. questo è sicuro per la maggior parte dei casi, –

+0

, ma il pulsante non sarà evidenziato al tocco, la tua risposta è meglio andare con. – Aziz

+0

grazie, non l'ho visto .. –