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.

0
Ryan 5 marzec 2012, 15:31

2 odpowiedzi

Najlepsza odpowiedź

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.

1
san 5 marzec 2012, 16:47

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

1
keywind 5 marzec 2012, 19:02