viewController在出现时显示为黑色

Dan*_*wns 7 iphone objective-c viewcontroller ios ios5

大家好我是iOS开发的新手,目前我遇到了一些问题,如果用户没有登录,我正在尝试以模态方式显示登录表单.

我正在使用NSUserDefaults存储一个id,我只是检查它是否存在.如果它没有,那么我希望UIViewController出现.

到目前为止,我在UINavigationController中有以下代码,它位于UITabViewController中,我试图让UIViewController出现在第一个UINavigationController(被选中的那个)之上,在动画发生的那一刻但是只有一个即使登录屏幕已经创建了所有相关的文本框等,也会出现黑屏.如果我将此登录屏幕设置为要加载的初始视图,则会加载正常.

这是出现在UINavigationController的First viewcontroller中的代码.

 NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
if (![prefs stringForKey:@"id"]){
    LoginViewController *loginController = [[LoginViewController alloc] init];
    [self presentModalViewController:loginController animated:YES];
} else {
    [self loadCoffeeUserOrders:[prefs stringForKey:@"id"]];  
}
Run Code Online (Sandbox Code Playgroud)

模态视图正在加载,但目前它只是显示黑色,我尝试创建一个新的登录屏幕,同样的事情发生:只有一个黑屏.

希望有足够的信息让某人了解可能发生的事情,我对iOS开发很新,所以如果我犯了一些错误,那么知道我哪里出错了会很高兴.

谢谢

Fir*_*eer 7

因此,您在此处创建的LoginViewController与您在故事板中设置的实例不同.我想你想要在故事板中加载和呈现的那个.

最简单的方法是在故事板中创建一个segue,从第一个视图控制器到您在那里创建的登录视图控制器.您可以从一个视图控制器按住Ctrl键拖动到另一个视图控制器,然后选择"模态"作为segue的类型.然后转到该segue的检查员并给它一个标识符.假设你称之为"segueToLogin".

然后从你的代码执行segue只需执行以下操作:

  if (![prefs stringForKey:@"id"]){

    [self performSegueWithIdentifier:@"segueToLogin" sender:self];

  }
Run Code Online (Sandbox Code Playgroud)

希望有所帮助.

编辑

所以只是回答你的问题,想象一下:

你有一个应用程序的好主意,所以你从你的垫上拿一张纸,你勾勒出这个伟大的设计.然后你的同事过来,所以你撕下一张新的空白纸,然后向他们展示.他们不会留下深刻的印象.

同样的事发生在这里.您在故事板中设置了包含所有视图的视图控制器.但是当它到了显示它的时候,你拿出一个新的完全空白的视图控制器并向用户显示.通过拉动和启动segue,您最终会加载所需的实际视图控制器实例.

现在在segues上,您可以在故事板中创建这些内容,以允许用户在场景中导航.有时这些segue直接连接到按钮或其他东西.但在这种情况下,您不希望要求用户按下按钮或其他内容来显示登录vc,因此您自己正在执行segue.

希望有道理.