2012-05-31 10 views
5

Chcę utworzyć widok modalny z elementem nawigacji (prawy widok na moim zrzucie ekranu) i chcę, aby miał przycisk "Wstecz". Moja aplikacja to aplikacja TabBar i nie chcę, aby ten widok miał pasek kart, ale chcę wczytać poprzedni widok (lewy widok na moim zrzucie ekranu) z segmentem podobnym do typu "push". Mogę utworzyć tylko segmentację typu push, aby zapewnić właściwą nawigację z powrotem do widoku po lewej stronie, jeśli jest załadowany jako widok modalny, pasek Tabeli zniknął. Jakiekolwiek obejścia tego problemu? Z góry dziękuję!Utwórz widok modalny z paskiem nawigacyjnym i przyciskiem Wstecz

Here's my screenshot

+0

Co jest złego w przedstawianiu widoku modalnego (po prawej) i po naciśnięciu przycisku Wstecz, aby go zamknąć, aby powrócić do widoku UITableView pokazanego po lewej stronie? – tarheel

+0

Ponieważ jest to UIWebView z dynamiczną zawartością i chcę, aby przycisk Wstecz był na pasku nawigacyjnym –

Odpowiedz

12

Wystarczy umieścić pasek nawigacyjny w nowym widoku za pomocą elementu przycisku paska. Utwórz akcję dla elementu przycisku paska, przeciągając kontrolkę z elementu przycisku paska do .h kontrolera widoku. Następnie można użyć metody delegata oraz protokół powiedzieć pierwszego kontrolera, gdy został naciśnięty przycisk i go używać [self dismissModalViewControllerAnimated:YES];

to w swoim drugim widoku utworzyć protokół z metodą zrobić coś takiego:

@protocol SecondViewControllerDelegate <NSObject> 

-(void) done; 

@end 

@interface SecondViewController : UIViewController { 
    ... 
    id delegate; 
} 

... 

@property (nonatomic, assign) id<SecondViewControllerDelegate> delegate; 

-(IBAction)done:(id)sender; //this will be linked to your nav bar button. 
@end 

następnie w swoim działaniu od swojej przycisku nazywają to:

-(IBAction)done:(id)sender{ 
    [self.delegate done]; 
} 

kontroler pierwszy widok będą musiały wdrożyć protokół <SecondViewControllerDelegate>

następnie w swoim pierwszym kontrolerze widoku, ustaw go jako delegata dla drugiego kontrolera widoku przed przejściem.

-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if([[segue identifier] isEqualToString:@"Second View Modal Segue Identifier"]) 
    { 
     SecondViewController *viewController = segue.destinationViewController; 
     viewController.delegate = self; 
    } 
} 

wreszcie złapać odbywa rozmowę z delegatem w swoim pierwszym kontrolerze widoku:

-(void) done 
{ 
    [self dismissModalViewControllerAnimated:YES]; 
} 

To jak mam to zrobić. Jeśli nie masz dużego doświadczenia z protokołami i delegatami, na początku może się to wydawać kłopotliwe, ale dla mnie dobrze.

+0

Przepraszam, jeśli są jakieś literówki, pisałem to wszystko od zera właśnie teraz. –

6

Będziesz musiał zawinąć prawej stronie widoku kontrolera w nowym kontrolerem nawigacyjnym. W IB wybierz go i wybierz pozycję menu Editor -> Embed In -> Navigation Controller, a IB pokaże pasek nawigacji, który możesz dostosować do zawartości twojego serca.

+0

Czy to pozwoli mi przedstawić go jako widok modalny? –

+0

Tak, rzeczywiście. Na iPadzie możesz mieć mniejszy, scentralizowany widok. Musisz zaimplementować własne przyciski na pasku nawigacji, aby je zamknąć. – Mundi

+1

Dzięki. W systemie iOS 7 po prostu przeciągając pasek nawigacji będzie źle wyglądać, ponieważ tło "paska czasu", w przeciwieństwie do paska nawigacji, nie ma szarego tła. Ale ta metoda rozwiązała problem i wydaje się bardziej elegancka. –