2012-04-24 9 views
0

アプリの起動時にパスコード/ピンコード(モーダルビューコントローラ)を表示しようとしています。あなたはAppDelegate.hにコードが表示されることがありますアプリを起動するとパスコード/ピンコードが表示される - ストーリーボード

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 

    if (![[NSUserDefaults standardUserDefaults] boolForKey:@"passcode_in"]) { 
     //display passcode screen 
     UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 
     UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"PasscodeViewController"]; 
     [vc setModalPresentationStyle:UIModalPresentationFullScreen]; 

     [self presentModalViewController:vc animated:NO]; 


    } else { 
     NSLog(@"No Passcode Screen"); 
} 

    return YES; 
} 

問題はAppDelegateがモーダルビューコントローラ(presentModalViewController)を表示するためにサポートしていないということです。私は.xibファイルを使用するつもりはない、私のアプリのStoryboardのみ。誰がそれが間違っているか知っていますか?任意の提案が高く評価されました。

が、私は私の以前の投稿の質問のいずれかに与えられた指示に従っ

を解決しhttps://stackoverflow.com/a/10303870/1344459私は(PinCodeViewControllerためAppDelegate.mに二つの方法にapplicationDidEnterBackgroundapplicationWillTerminateをいくつかのコードを追加することで問題を解決しましたモーダル)を起動します。今はとてもスムーズに作業しています。

答えて

0

私の解決策は、ストーリーボードに別のビューコントローラーを作成し、それを私の最初のビューコントローラーにカスタムセグを介してリンクし、ViewControllerのviewDidLoadメソッドでsegueを呼び出すことでした。 LoginSegue.h

#import <UIKit/UIKit.h> 
@interface LoginSegue : UIStoryboardSegue 
@end 

LoginSegue.m

#import "LoginSegue.h" 

@implementation LoginSegue 

- (void)perform { 
    UIViewController *src = (UIViewController *) self.sourceViewController; 
    UIViewController *dst = (UIViewController *) self.destinationViewController; 
    [UIView transitionWithView:src.navigationController.view duration:0.0 
         options:UIViewAnimationTransitionNone 
        animations:^{ 
         [src.navigationController presentViewController:dst animated:NO completion:nil]; 
         } 
        completion:NULL]; 
} 
@end 

は、次にストーリーボードでは、あなたのセグエを選択し、LoginSegue、あなたが好きなように識別子にセグエクラスを設定します。私は@ "toLogin"です。そして、あなたのviewDidLoadで、次のものがあります。

[self performSegueWithIdentifier:@"toLogin" sender:self]; 
+0

明確にするために、カスタムセグを介してこのログイン画面を表示するViewControllerは、最初のView Controllerである必要があります。 – geraldWilliam

+0

これは私の他のUIViewControllerのための本当に良いものですが、ログインとPinCodeスクリーンではありません。私はアプリケーションを起動すると、PinDecodeViewController(モーダル)のAppDelegate.mの** applicationDidEnterBackground **と** applicationWillTerminate **の2つのメソッドにいくつかのコードを追加しました。今はとてもスムーズに作業しています。ご協力ありがとうございました。 – hightech

0

presentModalViewControllerUIViewControllerクラスのメソッドです。 AppDelegateはNSObjectまたはUIResponderであるため、認識できません。

パスコード/ピンコードビューをモーダルではなく、ストーリーボードの最初のUIViewControllerに配置する必要があります。

モーダルで表示する必要がある場合は、必要でない場合でも、AppDelegateからではなく、ストーリーボードの最初のUIViewControllerからモーダルビューを表示します。あなたのUIViewControllerで

あなたはこのような何かを書く必要があります。

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 
    UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"PasscodeViewController"]; 
    [vc setModalPresentationStyle:UIModalPresentationFullScreen]; 

    [self performSelector:@selector(presentModal) 
       withObject:nil 
       afterDelay:0.0]; 
} 

- (void)presentModal { 
    [self presentViewController:vc animated:NO completion:NULL]; 
} 

N.B. performSelectorが必要です。あなたがそれを使用しない場合、あなたのビューは表示されません。 presentModalViewControllerは非推奨となりましたので、代わりにpresentViewControllerを使用してください。

+0

私はそれをしましたが、私はPincodeモーダルビューコントローラのためにAppDelegate.mの中に何を追加する必要があるのか​​を考え出しました。私はアプリケーションを起動すると、PinDecodeViewController(モーダル)のAppDelegate.mの** applicationDidEnterBackground **と** applicationWillTerminate **の2つのメソッドにいくつかのコードを追加しました。今はとてもスムーズに作業しています。ご協力ありがとうございました。 – hightech

+0

あなたは大歓迎です! :)あなた自身の答えを書いて、この質問が閉じられていることを表示し、他のプログラマーが同じ問題を解決するのを助けるためにそれを選択してください。 – Beppe

0

パスコードがログインの前提条件である場合、ログインパスの一部にすることは意味があります。

これをストーリーボードで行うには、ナビゲーションコントローラをペイントし、デフォルトで取得するUITableViewControllerルートを削除し、PasscodeViewControllerをルートとして設定します。次にそこからLoginViewControllerにプッシュセグを追加します。

PasscodeViewControllerのロジックは、ここで説明したものと似ています。viewWillAppear:パスコード要件が満たされているかどうかを確認できます。必要な場合は、パスコードビューを表示して作業します。すでにパスコードを持っている場合は、LoginViewControllerにsegueを実行します。どちらも必要でない場合は、却下してください。パスコードがPasscodeViewControllerによって収集された後

最後に、それは(LoginViewControllerにプッシュセグエを行う)ログインを必要とするかどうかを決定する、または単にアプリを起動(却下)することができます。

希望します。

+0

ストーリーボードのViewControllerを削除する必要はありません。私はあなたが前のポストで与えた指示に従った。私はアプリケーションを起動すると、PinDecodeViewController(モーダル)のAppDelegate.mの** applicationDidEnterBackground **と** applicationWillTerminate **の2つのメソッドにいくつかのコードを追加しました。今はとてもスムーズに作業しています。ご協力ありがとうございました。 – hightech

関連する問題