2012-03-05 3 views
0

В сущности, это правильный способ нажатия нового контроллера просмотра из подвидного вида навигационного контроллера.Нажатие контроллера из подвыборок

от выпуска является подвиды по навигационному не наследуют self.navigationController (его nil)

Причины мне нужна отдельные контроллеры для представления навигационной панели & основного вид, но и нужно нажать новые контроллеры.

Я готов изменить эту модель, если кто-то может сказать мне правильный способ сделать это.

также:

AppDelegate *del = (AppDelegate *)[UIApplication sharedApplication].delegate 
[del.navigationController pushViewController:vc animated:YES]; 

Не работает в качестве контроллера делегатов nil.

+0

Также: ' AppDelegate * del = (AppDelegate *) [UIApplication sharedApplication] .delegate; [del.navigationController pushViewController: vc animated: YES]; ' не работает, поскольку контроллер делегатов равен нулю – Ryan

ответ

1

Создайте следующую категорию в 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 

Теперь получите SuperView из подвид.

mySuperView = [mySubView superview]; 

Затем вызовите метод из созданной категории.

Теперь, используя этот viewController, вы можете получить доступ к navigationController.

Я не пробовал вышеуказанный код и подход, но я надеюсь, что он должен работать.

+0

Спасибо! Делает удовольствие, кажется немного взломанным, хотя – Ryan

1

Вы можете попробовать два способа
1.Use navigationController в superViewController, чтобы подтолкнуть ваш ViewController
2.Embed текущий ViewController в NavigationController так что navigationController не будет нулевой

Смежные вопросы