2013-02-07 10 views
6

Chcę utworzyć niestandardowy pasek nawigacji, jak w aplikacji BestBuy lub jak pokazano na poniższym zrzucie ekranu.Jak utworzyć niestandardowy pasek nawigacyjny, taki jak BestBuy?

enter image description here

Chcę ten typ nawigacji, aby być zawsze na wierzchu i każdego viewController.

Jeśli ktoś może mi powiedzieć, procedura lub jakiejkolwiek pomocy zostanie doceniona. Dzięki.

+0

nie sądzę, są one za pomocą niestandardowego paska nawigacyjnego ... to prosty obraz :) – NSCry

+0

oni prawdopodobnie nie .. zgadzam. moja odpowiedź jest przesadna dla tego .. jest najbardziej elastyczna, ale kod Aziza lepiej pasuje do TEGO, myślę. .. chociaż nie wiem o separatorach tła –

Odpowiedz

11

Napisz podklasę UINavigationBar, w której robisz niestandardowy rysunek i w razie potrzeby dodawaj subviews.

następnie poinformować navigationController wykorzystać tę klasę initing go za pomocą initWithNavigationBarClass:toolBarClass:

przykład

@interface MyBar : UINavigationBar 
@end 

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

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

zamiast initWithRootViewController


Próbka

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

Jak poinformować navigationController o użyciu tej klasy? –

+0

zobacz edytowaną odpowiedź –

+0

Następnie jak ustawić kontroler główny? –

4

navigationBar może potrwać od trzech widok, dwa przyciski z każdej strony w lewo iw prawo, również można dodać widok tytuu ,,

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

i dodać pasek wyszukiwania

self.navigationItem.titleView = mySearchbarView; 
+0

tak, jeśli nie potrzebujesz separatorów na przykład ... chociaż może to być obraz w tle .. to na pewno działa w większości przypadków –

+0

, ale potem przycisk nie będzie podświetlony na dotyk, odpowiedź jest lepsza. – Aziz

+0

dzięki, nie widziałem ... –

Powiązane problemy