从子视图中推送控制器

时间:2012-03-05 11:31:39

标签: objective-c ios cocoa-touch

从本质上讲,从导航控制器的子视图中推送新视图控制器的正确方法是什么。

问题是导航视图的子视图不会继承self.navigationControllernil

原因是我需要单独的控制器用于导航栏视图&主视图,但都需要推动新的控制器。

如果有人能告诉我这样做的正确方法,我愿意改变这种模式。

此外:

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

不起作用,因为委托控制器为nil

2 个答案:

答案 0 :(得分: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

现在从subView获取SuperView。

mySuperView = [mySubView superview];

然后从创建的类别中调用该方法。

mySuperViewController = [mySuperView viewController];

现在,使用此viewController,您可以访问navigationController。

我没有尝试过上面的代码和方法,但我希望它能够正常工作。

答案 1 :(得分:1)

您可以尝试两种方式 1.使用superViewController的navigationController推送你的viewController
2.在NavigationController中嵌入当前的viewController,以便navigationController不会为nil