-->

applicationWillEnterForeground呈现视图控制器(applicationW

2019-10-18 13:58发布

我有需要在每次的时间被呈现一个PIN视图控制器- (void)applicationWillEnterForeground:(UIApplication *)application火灾。 我有多个视图控制器和当应用程序进入背景用户可以在其中任何一个。

问题是我不知道如何在任何视图控制器当前活动呈现PIN视图控制器。 下面是我实现的外观:

- (void)applicationWillEnterForeground:(UIApplication *)application
{
    ResourceSingleton *resource = [ResourceSingleton sharedSingleton];
    if ([resource checkIfPINIsEnabled])
    {
        PinViewController *pinView = [[PinViewController alloc] initWithMode:kPINViewControllerModeEnter];
        pinView.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
        [self.window.rootViewController presentViewController:pinView animated:YES completion:NULL];
    }
}

但是PIN视图仅出现,如果我在第一视图控制器(根之一)。 如何流行起来的任何视图控制器吗?

我已经看到了使用applicationwillenterforeground了密码的屏幕 ,但必须有一个更好的办法还是我错了? 这将是为iOS 7,所以如果只有7有这样的ok了功能,但我敢肯定它可以在6要做的事。

Answer 1:

你可以让应用程序的委托办理的PIN视图的逻辑,并有是视图,而不是一个视图控制器。 只需添加视图作为窗口的子视图,它会显示在别的。

- (void)applicationWillEnterForeground:(UIApplication *)application {
    UINib *pinNib = [UINib nibWithNibName:@"PINView" bundle:nil];
    UIView *pinView = [pinNib instantiateWithOwner:self options:nil][0];
    [self.window addSubview:pinView];
}

如果您的应用程序委托厦门国际银行的的文件的所有者,那么你就可以连接你的视图中的应用程序的委托需要的任何网点。



Answer 2:

如果你的根视图控制器是一个NavigationController,然后推或呈现在大多数情况下工作。 您已经到位的所有代码,只需要创建一个导航控制器。 这是行不通的唯一情况是,如果有已经提出了模态视图控制器。 在一个需要先撤了这种情况。

这是一个有些凌乱的实现,采用这种情况下照顾了。

AKPresentedViewController *pres = [self.window.rootViewController.storyboard instantiateViewControllerWithIdentifier:@"pres"];

UINavigationController *navi = ((UINavigationController*)self.window.rootViewController);
if (navi.presentedViewController) {
    [navi.presentedViewController dismissViewControllerAnimated:YES completion:^{
        [navi presentViewController:pres animated:NO completion:nil];
        }];
} else {
    [navi presentViewController:pres animated:NO completion:nil];
}


Answer 3:

你可以提出你的PIN视图控制器他们提到的方式在这里 。

而对于突然出现的PIN视图控制器我猜测,用户有这样的PIN视图控制器消失输入正确的PIN码。 在这种情况下,它可以弹出本身:

[self.presentingViewController dismissViewControllerAnimated:YES completion:nil];

希望这可以帮助!



Answer 4:

转换为所述目标C代码到夫特4,把代码转换成FUNC applicationWillEnterForeground

   let pres = self.window?.rootViewController?.storyboard?.instantiateViewController(withIdentifier: "StartVC")
    let navi: UINavigationController = self.window?.rootViewController as! UINavigationController
    if ((navi.presentedViewController) != nil) {
        navi.dismiss(animated: true) {
            navi.present(pres!, animated: false, completion: nil)
        }
    } else {
        navi.present(pres!, animated: false, completion: nil)
    }


文章来源: applicationWillEnterForeground present a view controller