我必须根据返回值加载视图。这是我的代码。在构建模拟器的屏幕后保持白色。你有什么建议我应该改变吗? logInView和createNewPasswordView正在运行。如果我将它们设置为窗口的rootViewController,我可以看到它们
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
PasswordHandling *aPasswortHandler = [[PasswordHandling alloc] init];
self.passwordHandling = aPasswortHandler; [aPasswortHandler release];
UINavigationController *navigationController;
if ([passwordHandling passwordInKeyChain] == TRUE) {
LogInView *logInView = [[[LogInView alloc] initWithNibName: @"LogInView" bundle: nil] autorelease];
navigationController = [[UINavigationController alloc] initWithRootViewController:logInView];
} else {
CreateNewPasswordView *createNewPasswordView = [[CreateNewPasswordView alloc] initWithNibName:@"CreateNewPasswordView" bundle: nil];
navigationController = [[UINavigationController alloc] initWithRootViewController:createNewPasswordView];
}
[self.window addSubview:navigationController.view];
[self.window makeKeyAndVisible]; return YES;
我注意到MainWindow.Xib已加载。但那不是应该加载的xib文件
答案 0 :(得分:3)
为什么要在具有nib文件的项目中以编程方式创建窗口? Nib文件是解决这类问题的正确方法,因为无论如何都要使用它们,没有充分的理由避免使用最基本的文件。
那就是说,你应该做的第一件事是替换它:
[self.window addSubview:navigationController.view];
有了这个:
[self.window setRootViewController:navigationController];
要调试您的问题,您应该检查您关注的所有视图的帧。我可能导致此问题的原因是至少有一个框架是CGRectZero
。
**编辑**
VC有自己的nib文件不是问题。问题是您应该使用MainWindow.xib创建的窗口。特别是如果你是新手,你没有理由在代码中创建你的窗口。删除你创建的窗口,确保在运行此代码时self.window不是nil,并使用setRootViewController而不是addSubview。