大家好,我是 iOS 开发的新手,目前遇到了一些问题,我正在尝试让登录表单在用户未登录时模态显示。
我正在使用 NSUserDefaults 来存储一个 id,我只是检查它是否存在。如果没有出现,那么我希望 UIViewController 出现。
到目前为止,我的 UINavigationController 中有以下代码,它位于 UITabViewController 中,我试图让 UIViewController 出现在第一个 UINavigationController(被选中的那个)上方,此时动画正在发生,但是那里只是一个黑屏,即使登录屏幕已经创建了所有相关的文本框等。如果我将此登录屏幕设置为要加载的初始 View ,它会正常加载。
这是出现在 UINavigationController 的第一个 View Controller 中的代码。
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
if (![prefs stringForKey:@"id"]){
LoginViewController *loginController = [[LoginViewController alloc] init];
[self presentModalViewController:loginController animated:YES];
} else {
[self loadCoffeeUserOrders:[prefs stringForKey:@"id"]];
}
模态视图正在加载,但此刻它只是显示为黑色,我尝试创建一个新的登录屏幕,但同样的事情发生了:除了黑屏什么都没有。
希望那里有足够的信息让别人了解可能发生的事情,我是 iOS 开发的新手,所以如果我犯了一些错误,知道我哪里出错了会很高兴。
谢谢
最佳答案
因此,您在此处创建的 LoginViewController 实例与您在 Storyboard 中设置的实例不同。我想你想让 Storyboard中的那个被加载和呈现。
最简单的方法是在 Storyboard中创建一个从您的第一个 View Controller 到您在那里创建的登录 View Controller 的 segue。您可以按住 Ctrl 从一个 View Controller 拖动到另一个 View Controller ,然后选择“Modal”作为 segue 的类型。然后去找那个 segue 的检查员并给它一个标识符。假设您将其称为“segueToLogin”。
然后要从您的代码中执行该 segue,只需执行如下操作:
if (![prefs stringForKey:@"id"]){
[self performSegueWithIdentifier:@"segueToLogin" sender:self];
}
希望对您有所帮助。
编辑
所以为了回答你的问题,想象一下:
您对应用有一个绝妙的想法,因此您从便笺簿上取下一张纸,然后勾勒出这个绝妙的设计。然后你的同事过来,所以你撕下一张新的空白纸给他们看。他们不会留下深刻印象。
同样的事情发生在这里。您在 Storyboard中设置了一个包含所有 View 的 View Controller 。但是到了显示它的时候,你拿出了一个新的完全空白的 View Controller 并将其显示给用户。通过拉动并启动 segue,您最终加载了您想要的实际 View Controller 实例。
现在,在 segues 上,您可以在 Storyboard中创建它们以允许用户在场景中导航。有时这些 segues 直接附加到按钮或其他东西。但是在这种情况下,您不想让用户按下按钮或其他东西来显示登录 vc,所以您自己执行 segue。
希望这是有道理的。
关于iphone - viewController出现时出现黑色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8014437/