如何更改实际视图控制器的正确方法?在加载的视图父级,present和presentsViewController为null

时间:2013-01-21 00:38:49

标签: objective-c xcode cocoa ios6 parentviewcontroller

我的iOS iPad应用程序上有以下结构:

  • RootViewController:登录
    • @property UITabbar * main(登录成功后加载);

appDelegate我有两个属性:窗口和登录。在第一个我加载UIWindow和其他LoginViewController (UIViewController)。并将Login设置为RootViewController。

在登录时,我有一个名为“main”的属性,输入为MainController(扩展UITabbarController)。

成功登录后,我使用上面的代码加载main:

[_main setModalTransitionStyle:UIModalTransitionStyleCrossDissolve];
[self presentViewController:_main animated:YES completion:nil];

MainController已加载到viewDidLoad方法中。我有两点:

我需要将self设置为MainController的委托吗?

这是我的MainController viewDidLoad方法的开头:

[super viewDidLoad];
[self setDelegate:self];
NSLog(@"Parent view controller is: %@", [self parentViewController]);
NSLog(@"Presented view controller is: %@", [self presentedViewController]);
NSLog(@"Presenting view controller is: %@", [self presentingViewController]);

这个日志是:

2013-01-20 21:23:53.180 MyApp[6304:11303] Parent view controller is: (null)
2013-01-20 21:23:53.181 MyApp[6304:11303] Presented view controller is: (null)
2013-01-20 21:23:53.182 MyApp[6304:11303] Presenting view controller is: (null)

我是否使用正确的方式呈现viewController?或者在点击按钮或登录后显示视图? 缺什么?我是否正确使用了视图层次结构?

是否需要包含将要呈现的控制器的属性?

我从现在开始欣赏!

1 个答案:

答案 0 :(得分:0)

您是否自己编写了应用代理和其他控制器的代码?如果是这种情况,那么因为你还没有发布剩下的代码,我可以说是初始化你的所有视图控制器。

YourViewControllerNameHere = [[ViewControllerType alloc] init];

或者如果你有一个nib / xib / storyboard文件,那么

    YourViewControllerNameHere = [[ViewControllerType alloc] initWithNibName:youInterfaceFileNameHereWithoutFileType bundle:nil];