Wykonaj:
[[self navigationController] dismissModalViewControllerAnimated:YES];
To będzie powrót do VC że modally prezentowanym kontroler nawigacyjny. Dalsze oddalanie się po tym zależy od tego, jak popchnąłeś te "kilka widoków" przed kontrolerem nawigacyjnym.
Edit - wyjaśnienie dotrzeć do najgłębszych korzeni ...
Brzmi jak tych „kilku widokach” są na inny, będący podstawą stos kontrolera nawigacyjnego. Może to być trochę skomplikowane, ponieważ czystym sposobem, aby dostać się dalej z powrotem w tym stosie, jest poprowadzenie kontrolera nawigacyjnego do własnego katalogu głównego. Ale skąd może wiedzieć, że modalne VC na górze jest zrobione?
Zadzwonimy do kontrolera widoku, który wykonał modalną prezentację drugiego kontrolera nawigacyjnego VC_a. Jest to modalnie zaprezentowany kontroler nawigacyjny, którego najwyższym VC jest VC_b. W jaki sposób VC_a wie, aby uruchomić system nawigacyjny, gdy VC_b modalnie się od niego odrzuci?
Dobrą odpowiedzią (zazwyczaj) jest to, że VC_b zdecydował się z jakiegoś powodu odrzucić - jakiś warunek w aplikacji/modelu został zmieniony, aby zdecydować, że zostanie zrobione.
Chcemy, aby VC_a również wykrył ten warunek. Kiedy VC_b zostanie odwołany, a VC_a dostaje wiadomość viewWillAppear bo to ma być otwarty:
// VC_a.m
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
if (/* some app condition that's true when VC_b is done */) {
// I must be appearing because VC_b is done, and I'm being uncovered
// That means I'm done, too. So pop...
[self.navigationController popToRootViewControllerAnimated:NO];
} else {
// I must be appearing for the normal reason, because I was just pushed onto the stack
}
}
Którego z nawigatorów dzwonisz do kontrolera? Zostanie on wyświetlony w katalogu głównym kontrolera nawigacyjnego o nazwie I imagine. –
Utwórz pierwszy kontroler widoku jako rootViewcontroller kontrolera nawigacji –
Zamknij kontroler widoku modalnego, a następnie przejdź do katalogu głównego. – Till