W skrócie, jaki jest prawidłowy sposób wypychania nowego kontrolera widoku z widoku podrzędnego kontrolera nawigacji.
Problem polegający na tym, że widoki podrzędne widoku nawigacji nie dziedziczą self.navigationController
(jego nil
)
Powodem jest to, że potrzebuję oddzielnych kontrolerów dla widoku paska nawigacyjnego i widoku głównego, ale oba muszą wypchnąć nowe kontrolery.
Jestem gotów zmienić ten model, jeśli ktoś powie mi, jak to zrobić.
Również:
AppDelegate *del = (AppDelegate *)[UIApplication sharedApplication].delegate
[del.navigationController pushViewController:vc animated:YES];
Nie działa, ponieważ kontroler delegatów to nil
.
2 odpowiedzi
Utwórz następującą kategorię w UIView.
@interface UIView (GetUIViewController)
- (UIViewController *)viewController;
@end
@implementation UIView (GetUIViewController)
- (UIViewController *)viewController;
{
id nextResponder = [self nextResponder];
if ([nextResponder isKindOfClass:[UIViewController class]]) {
return nextResponder;
} else {
return nil;
}
}
@end
Teraz pobierz SuperView z subView.
mySuperView = [mySubView superview];
Następnie wywołaj metodę z utworzonej kategorii.
mySuperViewController = [mySuperView viewController];
Teraz, korzystając z tego kontrolera widoku, możesz uzyskać dostęp do kontrolera nawigacji.
Nie próbowałem powyższego kodu i podejścia, ale mam nadzieję, że zadziała.
Możesz spróbować na dwa sposoby
1. Użyj kontrolera nawigacji superViewController, aby przepchnąć swój kontroler viewController
2. Osadź swój obecny kontroler widoku w kontrolerze nawigacji, aby kontroler nawigacji nie był zerowy
Podobne pytania
Powiązane pytania
Nowe pytania
objective-c
Tego znacznika należy używać tylko w przypadku pytań dotyczących funkcji Objective-C lub zależnych od kodu w języku. Tagi [cocoa] i [cocoa-touch] powinny być używane, aby zapytać o ramy lub klasy Apple. Użyj powiązanych tagów [ios], [macos], [apple-watch] i [tvos] w przypadku problemów specyficznych dla tych platform.