2011-01-12 72 views
1

(最后的解决方案在底部)如何在普通的UIViewController之后设置一个自定义的UIViewController?

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

我创建一个处理一个LoginView一个LoginViewController,加入这个观点到从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 

我是什么试图做的是添加一个HomeViewController,它将扩展UIViewController类,在我的LoginViewController中,这样当我的loginView中的动作按钮被按下时,它会加载新的自定义视图控制器。

但是,当我这样做时,由HomeViewController处理的初始显示图像渲染不正确。当它应该是肖像和反之时,它似乎显示风景。

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

我认为我对这个问题的处理方法是错误的。任何人都可以将我引入最佳解决方案吗?我怎样才能做到这一点?


继@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按下注销操作时,该方法会呈现模态视图,而不是在应用程序启动时。

我还在didFinishLaunchingWithOptions:presentModalViewControllerdisplayLoginModalViewController方法中添加子视图之后放置了NSLog s。两个NSLog都显示在我的控制台中,我只是不知道它为什么不显示模态视图。

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

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

当涉及到模态视图,显然他们需要用户交互。这意味着他们只能在用户完成某项操作后才能呈现。当我第一次想要将登录设置为模态视图并将我的主视图保留为我的主视图时,仅在启动时才显示模态视图。它需要采取行动。

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

回答

1

登录视图非常适合模态视图控制器。看一看UIViewController的-presentModalViewController:作为一种机制来呈现您的登录视图控制器“在”其他视图控制器当前正在填充您的窗口的顶部。

3

您应该改用UINavigationController。 大多数应用程序都采用这种方法,即使导航栏已隐藏,视图已蒙上肤色,或从右侧看不到动画,通常会有一个UInavigationController。

它负责将viewController推到彼此顶部,显示内容,显示等。另一种方法是做UINavigationController手动执行的操作。 这将涉及您的viewController有一个变量来存储下一个viewController,然后将第二个viewControllers视图添加到第一个viewController ...(这是很多工作的方式,所以尽量避免这种方法作为您的基础)

This是必读阅读。我浏览了不同的viewController容器,以及何时使用它们 - 这只是在事情变得非常复杂之前所需要的东西。 ViewController Programming Guide

+0

我也必须upvote你的答案了。我结束了两者的结合。从loginViewController呈现navigationController的模式视图控制器。 – 2011-01-27 23:05:44

+0

很酷。希望你能以内存/可维护的方式运行它。 viewController容器就像一个可可触摸框架中的模式,如果你熟悉它们,它将有助于用户的开发时间和易用性。 – RickiG 2011-01-28 12:40:34

相关问题