提供隐藏在导航控制器下的视图控制器

时间:2014-06-11 15:36:51

标签: ios objective-c xcode ios7 presentviewcontroller

我是iOS开发的新手,现在正在学习一些课程。目标是修复一个由前同事在2011年初创建的非常古老的应用程序。我遇到了这个我无法解决的问题。

我想呈现一个显示登录屏幕的ViewController。但是当呈现ViewController时,它隐藏在navigationController和statusbar下。我也收到了这个错误:

不建议在分离的视图控制器上显示视图控制器

以下是代码:

    Login *fvController = [[Login alloc] initWithNibName:@"Login" bundle:[NSBundle mainBundle]];
    [fvController setTitle:@"Login"];
    UINavigationController *navCon = [[UINavigationController alloc] initWithRootViewController:fvController];
    [fvController setKc:self];
    [self presentViewController:navCon animated:YES completion:nil];
    [fvController release];
    [navCon release];
    navCon = nil;
    fvController = nil;

任何可以帮助我的人?​​

提前致谢!

2 个答案:

答案 0 :(得分:0)

UIWindows有一个rootViewController字段,指向层次结构中的第一个视图控制器。如果你从这个层次结构之外的控制器中呈现一个视图控制器,就会发生奇怪的事情。

检查您的关键窗口([yourUIApplication keyWindow])是否设置了此字段。如果它是零,则整个层次结构都是分离的,需要重新运行。如果窗口具有根视图控制器,则可以在重构层次结构时从此处显示视图,以便所有视图最终都连接到根。

答案 1 :(得分:0)

这种情况正在发生,因为您正在发布您创建的ViewController实例,尝试更改这样的代码:

在viewController顶部的@implementation下声明你的viewControllers

@implementation yourViewController
{
   Login *fvController;
   UINavigationController *navCon;
}

现在改变你的代码

fvController = [[Login alloc] initWithNibName:@"Login" bundle:[NSBundle mainBundle]];
[fvController setTitle:@"Login"];
navCon = [[UINavigationController alloc] initWithRootViewController:fvController];
[fvController setKc:self];
[self presentViewController:navCon animated:YES completion:nil];

将释放对象添加到dealloc方法

- (void)dealloc 
{
    [fvController release];
    [navCon release];
    navCon = nil;
    fvController = nil;
}