2012-05-01 16 views
8

Problem jest dość prosty do zrozumienia ze zdjęciami. Mam UINavigationController, który pozwala użytkownikowi przełączać się między widokami.Nawigacja Nie wyświetla poprawiania, gdy pushViewController

Pierwszy widok zawiera pasek wyszukiwania i widok tabeli tak: enter image description here

Drugi podstawowy widok, w którym informacja o komórce są wyświetlania

Po kliknięciu na pasku wyszukiwania, nawigacja kontroler zostaje ukryty, a pasek wyszukiwania znajduje się teraz u góry.

Teraz, gdy kliknę na komórkę, przechodzi do drugiego poglądów, ale pasek nawigacyjny jest najpierw ukryty jak poniżej:

enter image description here

A potem, to automatycznie pojawia się tak:

enter image description here

próbowałem kilka rzeczy jak pokazać pasek nawigacyjny przed popychanie następny kontroler widok, ale to jest dość brzydkie .. Czy ktoś wie jak wyświetlić pasek nawigacji bezpośrednio w drugim widoku (jak w aplikacji kontaktowej)?

[UPDATE]: Kod

AppDelegate.m (mówię o navigationcontroller2)

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{  
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
    FirstViewController *viewController1 = [[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil]; 
    SecondViewController *viewController2 = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil]; 

    viewController1.managedObjectContext = [self managedObjectContext]; 
    viewController2.managedObjectContext = [self managedObjectContext]; 
    viewController1.viewController2 = viewController2; 

    UINavigationController *navigationcontroller1 = [[UINavigationController alloc] initWithRootViewController:viewController1]; 
    [navigationcontroller1.navigationBar setTintColor:[UIColor lightGrayColor]]; 
    UINavigationController *navigationcontroller2 = [[UINavigationController alloc] initWithRootViewController:viewController2]; 
    [navigationcontroller2.navigationBar setTintColor:[UIColor lightGrayColor]]; 

    self.tabBarController = [[UITabBarController alloc] init]; 
    self.tabBarController.viewControllers = [NSArray arrayWithObjects:navigationcontroller1, navigationcontroller2, nil]; 

    self.window.rootViewController = self.tabBarController; 
    [self.window makeKeyAndVisible]; 

    return YES; 
} 

FirstView.m

- (void) searchBarTextDidBeginEditing:(UISearchBar *)theSearchBar { 
    [self.navigationController setNavigationBarHidden:YES animated:YES]; 
} 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (!noResultsToDisplay) { 
     PinDetailsViewController *pinDetailsViewController = [[PinDetailsViewController alloc] initWithNibName:@"PinDetailsViewController" bundle:nil]; 
     NSManagedObject *managedObject = [fetchedResultsController objectAtIndexPath:indexPath]; 
     Pin *pin = (Pin *) managedObject; 

     [self.navigationItem setTitle:@"Pins"]; 
     [self.navigationController pushViewController:pinDetailsViewController animated:YES]; 
     [pinDetailsViewController updateWithPin:pin]; 
    } 
} 

Jeśli potrzebujesz cokolwiek innego, po prostu zapytaj, ale myślę, że to wszystko.

+0

Proszę napisać kod. W przeciwnym razie bardzo trudno jest zobaczyć, gdzie jest problem. – MishieMoo

Odpowiedz

14

Spróbuj użyć tego kodu w każdym kontrolerze viewcontroller.

- (void) viewWillAppear:(BOOL)animated 
{ 

    [self.navigationController setNavigationBarHidden:NO animated:animated]; 

} 


- (void) viewWillDisappear:(BOOL)animated 
{ 
    [self.navigationController setNavigationBarHidden:YES animated:animated]; 

} 
+2

Zmieniłem cały układ mojej aplikacji, więc nie używam go już, ale działa jak urok. Mam nadzieję, że pomoże innym ludziom. Dziękuję Ci. –

+0

Pomaga mi od bólu głowy w grudniu 2015! Dziękuję Ci. – oyalhi

1

Przed pchania nowego kontrolera widoku, należy odkryć pasek nawigacji:

[self.navigationController setNavigationBarHidden:NO animated:YES];

+0

Jeśli ponownie przeczytasz mój post, zauważysz, że już to wypróbowałem. Działa, ale jest brzydka. Chciałbym zachować to samo, co w aplikacji Kontakt. –

1

miałem podobny problem ze stanowiskiem mojego paska nawigacyjnego. Kopalnia poruszał się z tyłu na pasku stanu, i naprawiłem ten problem poprzez ręczne ustawienie ramki NavBar:

-(void)adjustNavBarOrigin 
{ 
    CGRect r = self.navigationController.navigationBar.frame; 
    r.origin = CGPointMake(0, 20); // 20 is the height of the status bar 
    self.navigationController.navigationBar.frame = r; 
} 

musiałem zadzwonić tej metody w wielu miejscach, w tym: a didRotateFromInterfaceOrientation viewWillAppear :, ale to działało poczęstunek :)

+0

Próbowałem, ale to nie rozwiązuje problemu. –

+0

Doskonale działa; dzięki. Zaoszczędziłem dużo czasu – msmq

0

Ukrywanie paska UINavigationBar może czasami zakłócać właściwości. Spróbuj użyć właściwości alpha zamiast hidden.

Powiązane problemy