(底部的最终解决方案)
我正在尝试设置一个具有初始登录 View 的 iPad 应用程序。当用户单击该操作时,它应该重定向到主视图。
最初我正在设置一个 UIViewController 来处理登录 View 。从那里我想使用自定义 View Controller 显示下一组 View 。
我正在创建一个处理 loginView 的 LoginViewController,将此 View 从 AppDelegate 添加到窗口中:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
loginViewController = [[LoginViewController alloc] init];
[self.window addSubview:loginViewController.loginView];
[self.window makeKeyAndVisible];
return YES;
}
我的 LoginViewController 的界面如下:
@interface LoginViewController : UIViewController {
UIView *loginView;
UITextField *usernameTextField;
UITextField *passwordTextField;
UIButton *submitButton;
}
@property (nonatomic, retain) IBOutlet UIView *loginView;
@property (nonatomic, retain) IBOutlet UITextField *usernameTextField;
@property (nonatomic, retain) IBOutlet UITextField *passwordTextField;
-(IBAction)submit;
-(void)setupTextFields;
@end
我试图做的是在我的 LoginViewController 中添加一个 HomeViewController,它将扩展 UIViewController 类,这样当我的 loginView 中的操作按钮被按下时,它将加载新的自定义 View Controller 。
但是当我这样做时,由 HomeViewController 处理的初始显示图像呈现不正确。当它应该是纵向时,它似乎显示横向,反之亦然。
我希望登录 View 显示在 View 堆栈的底部,以便在单击注销操作时能够返回此登录 View 。
我认为我解决这个问题的方法是错误的。谁能引导我找到最好的解决方案?我怎样才能做到这一点?
在遵循@Jonah 提出的解决方案之后,我已将 homeViewController 切换为在 AppDelegate 中创建的并调用
displayLoginModalViewController
如下:- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
homeViewController = [[HomeViewController alloc] init];
[homeViewController displayLoginModalViewController];
[self.window addSubview:homeViewController.homeView];
[self.window makeKeyAndVisible];
return YES;
}
我的执行
displayLoginModalViewController
如下:-(void)displayLoginModalViewController{
LoginViewController *loginViewController = [[LoginViewController alloc] init];
loginViewController.modalPresentationStyle = UIModalPresentationFullScreen;
loginViewController.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
[self presentModalViewController:loginViewController animated:YES];
}
我确实尝试调用
displayLoginModalViewController
添加 homeView
前后的方法到窗口,它没有呈现模态视图。我觉得我在这里缺少一些东西。当从 homeView 按下注销操作时,该方法会渲染模态视图,而不是在应用程序启动时。我也放了
NSLog
s 在 didFinishLaunchingWithOptions:
中添加 subview 后在 presentModalViewController
之后: 在 displayLoginModalViewController
方法。两个NSLog
s 显示在我的控制台中,我只是不知道为什么它不显示模态视图。==================================================== ===========================================
感谢您提供的选项。我决定走模态路线。不幸的是,当我最初设置它时,我以错误的方式解决了这个问题。
当涉及到模态视图时,显然它们需要用户交互。这意味着它们只能在用户完成操作后呈现。当我第一次想将登录设置为模态视图并将我的主视图保持为主视图时,无法在启动时显示模态视图。它需要采取行动。
盯着屏幕看了几个小时后,我决定不再固执,将登录用作我的主屏幕,并将主页 View 显示为模态。这不仅解决了在启动时显示登录的问题,而且还有助于设置我希望能够在不退出应用程序的情况下让用户退出应用程序并从那时起简单地释放所有内存使用量。
最佳答案
您应该改用 UINavigationController。
大多数应用程序都采用这种方法,即使导航栏被隐藏, View 被蒙皮或者它没有从右侧动画,那里通常有一个 UInavigationController。
它负责将 viewController 相互叠加的结构、内存、显示等。另一种方法是手动执行 UINavigationController 执行的操作。
这将涉及您的 viewController 有一个变量来存储下一个 viewController,然后将第二个 viewControllers View 添加到第一个 viewController ...(这是很多工作的方式,所以尽量避免这种方法成为您的基础)
这是 必须读。我浏览了不同的 viewController 容器以及何时使用它们——这正是你在事情变得非常复杂之前需要的东西。
ViewController Programming Guide
关于cocoa-touch - 如何在通用 UIViewController 之后设置自定义 UIViewController?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4673705/