Cocoa touch 如何在常规UIViewController之后设置自定义UIViewController?

Cocoa touch 如何在常规UIViewController之后设置自定义UIViewController?,cocoa-touch,ipad,ios,uiview,uiviewcontroller,Cocoa Touch,Ipad,Ios,Uiview,Uiviewcontroller,(底部的最终解决方案) 我正在尝试设置一个iPad应用程序,它将有一个初始登录视图。当用户单击该操作时,它应该重定向到主视图。 最初,我设置了一个UIViewController来处理登录视图。从那里,我想使用自定义视图控制器显示下一组视图 我正在创建一个处理loginView的loginView控制器,并从AppDelegate将此视图添加到窗口中: - (BOOL)application:(UIApplication *)application didFinishLaunchingWithO

(底部的最终解决方案)

我正在尝试设置一个iPad应用程序,它将有一个初始登录视图。当用户单击该操作时,它应该重定向到主视图。 最初,我设置了一个UIViewController来处理登录视图。从那里,我想使用自定义视图控制器显示下一组视图

我正在创建一个处理loginView的loginView控制器,并从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
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

    homeViewController = [[HomeViewController alloc] init];
    [homeViewController displayLoginModalViewController];
    [self.window addSubview:homeViewController.homeView];
    [self.window makeKeyAndVisible];

    return YES;
}
-(void)displayLoginModalViewController{
    LoginViewController *loginViewController = [[LoginViewController alloc] init];
    loginViewController.modalPresentationStyle = UIModalPresentationFullScreen;
    loginViewController.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
    [self presentModalViewController:loginViewController animated:YES];
}
我试图做的是在我的loginView控制器中添加一个HomeViewController,它将扩展UIViewController类,这样当按下loginView中的操作按钮时,它将加载新的自定义视图控制器

但当我这样做时,HomeViewController处理的初始显示图像渲染错误。当它应该是纵向的,反之亦然时,它显示的是横向的

我希望在视图堆栈的底部显示登录视图,以便在单击注销操作时能够返回到此登录视图

我认为我处理这个问题的方法是错误的。有人能告诉我最好的解决方案吗?我怎样才能做到这一点


遵循@Jonah提出的解决方案后,我将homeViewController切换为在AppDelegate中创建的,并调用
displayLoginModalViewController
,如下所示:

@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
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

    homeViewController = [[HomeViewController alloc] init];
    [homeViewController displayLoginModalViewController];
    [self.window addSubview:homeViewController.homeView];
    [self.window makeKeyAndVisible];

    return YES;
}
-(void)displayLoginModalViewController{
    LoginViewController *loginViewController = [[LoginViewController alloc] init];
    loginViewController.modalPresentationStyle = UIModalPresentationFullScreen;
    loginViewController.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
    [self presentModalViewController:loginViewController animated:YES];
}
my
displayLoginModalViewController
的实现如下:

@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
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

    homeViewController = [[HomeViewController alloc] init];
    [homeViewController displayLoginModalViewController];
    [self.window addSubview:homeViewController.homeView];
    [self.window makeKeyAndVisible];

    return YES;
}
-(void)displayLoginModalViewController{
    LoginViewController *loginViewController = [[LoginViewController alloc] init];
    loginViewController.modalPresentationStyle = UIModalPresentationFullScreen;
    loginViewController.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
    [self presentModalViewController:loginViewController animated:YES];
}
在将
homeView
添加到窗口之前和之后,我尝试调用
displayLoginModalViewController
方法,但它没有呈现模式视图。我觉得这里缺少了一些东西。当从homeView中按下注销操作时,该方法会呈现模式视图,而不是在应用程序启动时

我还将
NSLog
s放置在
didfishlaunchingwithoptions:
中添加子视图后,以及
presentModalViewController
:在
displayLoginModalViewController
方法中。两个
NSLog
s都显示在我的控制台中,我只是不知道为什么它不显示模式视图

============================================================================================

感谢您提供的选项。我决定走模态路线。不幸的是,当我最初设置它时,我以错误的方式处理问题

当涉及到模态视图时,显然它们需要用户交互。这意味着它们只能在用户执行操作后显示。当我第一次想将登录设置为模式视图并将我的主视图设置为主视图时,启动时无法显示模式视图。这需要采取行动


在盯着屏幕看了几个小时后,我决定不再固执,使用登录作为我的主屏幕,并显示主视图作为模式。这不仅解决了启动时显示登录的问题,而且有助于进行设置。我希望用户能够在不退出应用程序的情况下从应用程序中注销,并从那时起释放所有内存使用量。

您应该改用UINavigationController。 大多数应用程序都采用这种方法,即使导航栏是隐藏的,视图是蒙皮的,或者它没有从右侧进入动画,但其中通常有一个UInavigationController

它负责将ViewController推到彼此的顶部、内存、显示等结构。另一种方法是执行UINavigationController手动执行的操作。 这将涉及到您的viewController有一个变量来存储下一个viewController,然后将第二个viewController视图添加到第一个viewController…(这是一个工作量很大的方法,因此请尽量避免将该方法作为基础)

这是必须阅读的。我浏览了不同的viewController容器,以及何时使用它们——这正是在事情变得真正复杂之前需要做的事情。

您应该改用UINavigationController。 大多数应用程序都采用这种方法,即使导航栏是隐藏的,视图是蒙皮的,或者它没有从右侧进入动画,但其中通常有一个UInavigationController

它负责将ViewController推到彼此的顶部、内存、显示等结构。另一种方法是执行UINavigationController手动执行的操作。 这将涉及到您的viewController有一个变量来存储下一个viewController,然后将第二个viewController视图添加到第一个viewController…(这是一个工作量很大的方法,因此请尽量避免将该方法作为基础)

这是必须阅读的。我浏览了不同的viewController容器,以及何时使用它们——这正是在事情变得真正复杂之前需要做的事情。
登录视图自然适合于模态视图控制器。看看UIViewController的-presentModalViewController:作为一种机制,可以在当前填充窗口的任何其他视图控制器的“顶部”显示登录视图控制器

登录视图自然适合于模态视图控制器。看看UIViewController的-presentModalViewController:作为一种机制,可以在当前填充窗口的任何其他视图控制器的“顶部”显示登录视图控制器

当我按下注销按钮时会发生什么?我只是再次显示模式视图吗?我认为您的选项非常适合我想要做的事情。当应用程序实例化时,如何让它加载我的模态视图控制器。我将一些代码放在initWithNibName方法中,但似乎没有加载它