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
Odpowiedz
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.
Przepraszam, jeśli są jakieś literówki, pisałem to wszystko od zera właśnie teraz. –
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.
Czy to pozwoli mi przedstawić go jako widok modalny? –
Tak, rzeczywiście. Na iPadzie możesz mieć mniejszy, scentralizowany widok. Musisz zaimplementować własne przyciski na pasku nawigacji, aby je zamknąć. – Mundi
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. –
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
Ponieważ jest to UIWebView z dynamiczną zawartością i chcę, aby przycisk Wstecz był na pasku nawigacyjnym –