2013-02-07 5 views
6

Je veux faire une barre de navigation personnalisée comme dans l'application BestBuy ou comme montré dans la capture d'écran ci-dessous.Comment créer une barre de navigation personnalisée comme BestBuy App?

enter image description here

Je veux que ce type de navigation pour être toujours sur le dessus de chaque viewController.

Si quelqu'un peut me dire la procédure ou n'importe quelle sorte d'aide serait appréciée. Merci.

+0

Je ne pense pas qu'ils utilisent la barre de navigation personnalisée ... c'est simple l'image :) – NSCry

+0

ils ne sont pas d'accord .. probable que je. ma réponse est exagérée pour cela .. il est le plus flexible mais le code d'aziz semble mieux adapté pour cela je pense. .. bien que je ne sais pas sur les séparateurs d'arrière-plan –

Répondre

11

écrire une sous-classe de UINavigationBar dans laquelle vous faites un dessin personnalisé et ajouter des sous-vues au besoin.

puis dites à votre NavigationController d'utiliser cette classe par Initing à l'aide initWithNavigationBarClass:toolBarClass:

par exemple

@interface MyBar : UINavigationBar 
@end 

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

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

au lieu de initWithRootViewController


Exemple

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

Comment dire à navigationController d'utiliser cette classe? –

+0

voir la réponse éditée –

+0

Ensuite, comment vais-je définir le contrôleur racine? –

4

navigationBar peut prendre trois point de vue, deux boutons de chaque côté gauche et à droite, vous pouvez également ajouter une vue pour le titre ,,

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

et ajouter la barre de recherche

self.navigationItem.titleView = mySearchbarView; 
+0

oui, si vous n'avez pas besoin des séparateurs par exemple ... bien que ceux-ci pourraient être en image de fond .. cela fonctionne pour la plupart des cas –

+0

sûr, mais alors le bouton ne sera pas mis en évidence au toucher, votre réponse est préférable d'aller avec. – Aziz

+0

merci, n'a pas vu que .. –

Questions connexes