viewWillAppear和viewDidLoad用于呈现登录弹出窗口。

4

我有一个UIViewController,如果用户没有登录,它应该弹出一个LoginViewController。问题是我应该在哪里调用它:

LoginViewController* lvc = [[LoginViewController alloc] init];
    lvc.delegate = self;
    //[lvc setModalPresentationStyle:UIModalPresentationFullScreen];
    [self presentModalViewController:lvc animated:NO];
    [lvc release]; 

应该在viewWillAppear中还是viewDidLoad中?我认为把它放在viewWillAppear更有意义?我试着把它放在viewDidLoad里面,但它给我的视图左右多了一个边框。这是为什么?
更新: 我在尝试对UISplitViewApplication的DetailViewController调用presentModalViewController。但是当我这样做时,什么也没有发生。我尝试创建一个新的UISplitViewApplication项目,但它仍未能正常工作。 问题是为什么?如何在UISplitViewApplication的viewWillAppear中呈现模态视图?

我们需要更多的信息。 - Moshe
2个回答

0
我会把类似这样的东西放在AppDelegate中。
- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions
{
    [self.window addSubview:self.viewController.view];
    [self.window makeKeyAndVisible];    

    // Show the login screen if the user hasn't logged in yet
if (... login check here...)
  {
    LoginViewController* loginController = [[LoginViewController alloc] init];
    [self.viewController presentModalViewController:loginController animated:NO];
    [loginController release];
  }
}

您的登录界面将会覆盖在您的普通视图控制器之上。成功登录后,关闭登录视图控制器,用户即可开始使用您的应用程序。


我的AppDelegate中没有self.viewController。 - adit
当然,你应该用你自己的视图控制器替换那部分 ;) - Mark
如果您熟悉UISplitView,能否看一下我在slev帖子评论中的2分钟视频? - adit
1
你不能使用 self.viewController。你需要先让你的视图加载,然后在其上方呈现模态视图... 在 viewDidAppear 中或在 viewDidAppear 之后的某个时间点执行此操作。 - ElasticThoughts
我尝试使用 self.window?.rootViewController。但是,由于视图尚未加载,因此此时视图不在窗口层次结构中。 - Declan McKenna
如果我添加了makeKeyAndVisible,就会出现以下错误:NSInternalInconsistencyException',原因是:“非法更新:在第0个section中行数非法。” 我认为对于一个模态视图控制器,viewDidAppear`可能是正确的方法。 - Declan McKenna

0
模态窗口试图根据调用它的视图控制器进行初始化(例如,调整nib大小)。在其父视图的viewDidLoad中创建和显示它有时会给它错误的信息,因为父视图仍在加载。这就是为什么您看到差异的原因。在viewDidAppear中呈现模态控制器在这种情况下更好,因为所有参数都已准备好传递给模态控制器,以便它可以正确地加载自己的视图。虽然有时如果要加载很多内容,即使那样也不够,您需要等待更长时间才能呈现模态视图(这听起来与您的情况完全不同,所以不用担心)。我希望这可以帮助您。

为什么在UISplitViewApplication的DetailViewController中无法执行presentModalViewController操作? - adit
我在上面添加了一些注释。 - adit
我录制了一个短短的2分钟视频,展示了我所做的事情http://www.screenr.com/pjI。请告诉我我做错了什么。 - adit
好的,我刚刚设置了一个新的分屏视图项目,并在viewDidAppear中呈现了一个模态窗口,所以我会将它放入一个压缩文件中并立即发送给你。 - justin
我在你的视频中看到的唯一需要添加的是在模态视图控制器创建中的 initWithNibName。我仍然会给你发送这个新项目,这样你就可以自己尝试一下,但我认为这是你需要改变的全部。(另外,xcode 4 看起来很不错,我有点嫉妒) - justin
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接