2013-08-30 1 views
1

- (void)applicationWillEnterForeground:(UIApplication *)application이 발생할 때마다 표시해야하는 PIN보기 컨트롤러가 있습니다. 여러 개의보기 컨트롤러가 있고 앱이 백그라운드로 들어가면 사용자가 그 중 하나에있을 수 있습니다.applicationWillEnterForeground에서보기 컨트롤러가 표시됩니다.

문제는 현재 활성화되어있는보기 컨트롤러에 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보기가 나타납니다. 모든보기 컨트롤러에서 팝업하는 방법?

나는 Using applicationwillenterforeground for a passcode screen을 보았지만, 더 좋은 방법이 있거나 틀렸는가? 이것은 iOS 7을위한 것입니다. 따라서 7 개가 그런 기능을 가지고 있다면 괜찮습니다.하지만 6에서 할 수 있다고 확신합니다.

답변

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]; 
} 

앱 위임 XIB의 파일의 소유자를 만들 경우에, 당신은 당신이 응용 프로그램의 위임에 뷰에 필요한 모든 콘센트를 연결 할 수 있습니다.

+0

본 적이 있지만 펜촉이 없으므로보기가 프로그래밍 방식으로 만들어집니다. 지금 무엇을해야할까요? – Majster

+0

@Majster, 그냥 프로그래밍 방식으로 응용 프로그램 대리인에서 만듭니다. – rdelmar

+0

또 다른 아이디어를 얻었습니다. 먼저이 문제에 대해 토론하고 앱 위임장에서 프로그램을 잘못 작성하면 문제를 해결할 수 있습니다. 어떻게 시합을했는지'self.viewController'를 현재 UINavigationController 대신에 UINavigationController로 설정하고 init은 현재 뷰 컨트롤러로 navController를 설정합니다. 윌 그때 일을 밀어? 당신이 무슨 뜻인지 알기를 바랍니다. – Majster

0

here과 같은 방법으로 PIN보기 컨트롤러를 표시 할 수 있습니다.

그리고 PIN보기 컨트롤러를 터뜨리려면 사용자가 올바른 PIN을 입력해야 PIN보기 컨트롤러가 사라져야한다고 생각합니다. 이 경우 자체가 터질 수 있습니다.

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

희망이 있습니다.

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]; 
} 
+0

@Majster 나는 똑같은 생각을 가지고있었습니다. 이 답변을 작성한 후에도 귀하의 의견을 보았지만 여전히 받아 들일 수있을 것이라고 생각했습니다. – allprog

+0

예, 어딘가에서 실수를 한 것으로 보입니다. 네비게이션 컨트롤러를 만들었지 만 밀고가 작동하지 않았습니다. 더 이상 문제가되지 않는다. app delegate에서 뷰를 만들었다. 조금 더 어지럽게 보일지라도 오 잘 ... 고마워. – Majster

+0

그것은 당신을 위해 일한 것이 좋다. 당신이 그것을 좋아한다면 Upvoting는 상처를주지 않습니다 :) – allprog