加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

iphone – Xcode:在applicationDidBecomeActive中显示登录视图

发布时间:2020-12-14 17:56:46 所属栏目:百科 来源:网络整理
导读:在我的应用程序中,我想显示一个登录屏幕 – 当应用程序启动时以及应用程序变为活动状态时将显示该屏幕.作为参考,我使用的是故事板,ARC,它是一个标签栏应用程序. 因此,我需要在applicationDidBecomeActive方法中执行此过程: - (void)applicationDidBecomeAct
在我的应用程序中,我想显示一个登录屏幕 – 当应用程序启动时以及应用程序变为活动状态时将显示该屏幕.作为参考,我使用的是故事板,ARC,它是一个标签栏应用程序.

因此,我需要在applicationDidBecomeActive方法中执行此过程:

- (void)applicationDidBecomeActive:(UIApplication *)application
{
    if ( ... ) { // if the user needs to login
        PasswordViewController *passwordView = [[PasswordViewController alloc] init];
        UIViewController *myView = self.window.rootViewController;
        [myView presentModalViewController:passwordView animated:NO];
    }
}

在某种程度上这确实有用 – 我可以在viewDidAppear中调用一个方法,该方法显示允许用户登录的警报视图.但是,这是不可取的,我希望有一个登录文本框和其他ui元素.如果我不调用我的登录方法,即使我在视图上放置了标签和其他元素,也没有任何反应并且屏幕保持黑色.

有谁知道解决这个问题的方法?我的密码视图嵌入在导航控制器中,但与主故事板分离.

解决方法

各种各样的答案终于让我找到了一个似乎并不太复杂的答案,所以我会在这里发布 – 如果我说实话,它实际上看起来非常好.

首先,我的密码视图嵌入在导航控制器(编辑器 – >嵌入)中,并使用带有id的模态segue连接到主标签栏控制器,在我的情况下为“loginModal”.

在applicationDidBecomeActive方法中输入如下内容:

[self performSelector:@selector(requestPasscode) withObject:nil afterDelay:0.2f];

然后将此功能放在App Delegate中的某个位置

-(void)requestPasscode{
    if ( /* If the user needs to login */ ) {
        [self.window.rootViewController performSegueWithIdentifier:@"loginModal" sender:self];
    }
}

这将在应用程序开始或进入前台时显示您的登录视图(例如,切换应用程序时).

注意:如果您的应用程序的根嵌入在导航控制器中,则上述行将不起作用.

然而,有两个错误;

>如果用户之前在解除应用程序时正在查看模态视图
>如果用户在密码视图中解除了应用程序.

这两个都导致应用程序崩溃,因此以下行进入applicationWillResignActive方法.

[self.window.rootViewController dismissViewControllerAnimated:NO completion:nil];

它基本上驳回了所有呈现的模态视图.这可能不是理想的,但是模态视图通常不会用于数据输入,因此在许多情况下,这是期望的效果.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读