2012-10-14 6 views
11

私はストーリーボードでXcode 4.5を使用してアプリケーションを構築しました。アプリケーションが初めて起動されるとき、私は最初のView Controllerに、受け入れなければならない利用規約を表示します。その後、アプリを起動して最初のView Controllerをスキップして、2番目のView Controllerに移動します。最初の起動時にビューを表示するにはどうすればよいですか?

は私がの効果にNSUserDefaultsクラスと何かを使用する必要があります知っている: 場合([[NSUserDefaultsの標準...] boolForKey:@「iHaveAcceptedTheTerms」])

しかし、私はこのクラスを使用したことがありません以前はこのコードをどのように実装するか分かりませんでした。誰かがこれを行う方法の詳細を共有することはできますか?

答えて

10

あなたのAppDelegateに入れます:

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

//first-time ever defaults check and set 
if([[NSUserDefaults standardUserDefaults] boolForKey:@"TermsAccepted"]!=YES) 
{ 
    [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"TermsAccepted"]; 
} 

rootViewControllerの利用規約とそれを受け入れる方法。この質問を保つの利益のために

if(termsaccepted){ 
    [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"TermsAccepted"]; 
} 
+0

ありがとう。アプリを「正常に進む」対「言葉を見せる」ようにする方法を詳しく説明できますか? – jac300

+0

これはあなた次第です。たとえば、ユーザーが初めてアプリケーションを起動すると、用語を表示するviewController(または単一のVCを使用する場合はビューのみ)が表示されます。条件が受け入れられると、あなたはそれを閉じて、あなたが言及したように2番目のものに行きます。これは、alexandresoliによって説明されているルートVCによって実行できます。次回にユーザが来ると、ルートVCはすぐに2番目のVCを表示します。 – NightCoder

+0

ありがとうございます。はい、コンセプトを理解していますが、コードを理解することはできません。したがって、用語が受け入れられたとしましょう...プログラムを「現在の用語ビューをスキップして次のビューに移動する」ように指示するコードを作成するにはどうすればよいですか?言い換えれば、アレクサンドレゾリのコードを見てみましょう:[self presentViewController:YOUR_TERMS_CONTROLLER animated:YES completion:nil]; "YOUR_TERMS_CONTROLLER"とは何ですか、どのようにView Controllerにラベルを付け、それをプログラムで参照するのですか? – jac300

4

それはあなたの最初のビューまたはデリゲートに次のようになります。

NSUserDefaults * standardUserDefaults = [NSUserDefaults standardUserDefaults]; 

BOOL isAccepted = [standardUserDefaults boolForKey:@"iHaveAcceptedTheTerms"]; 

if (!isAccepted) { 
    [self presentViewController:YOUR_TERMS_CONTROLLER animated:YES completion:nil]; 
} else { 
    [self.navigationController pushViewController:YOUR_NORMAL_CONTROLLER animated:YES]; 
} 

いけないあなたの条件コントローラ上のユーザの応答を保存するのを忘れ:

[standardUserDefaults setBool:YES forKey:@"iHaveAcceptedTheTerms"]; 
+0

私は最初のブロックを "用語"ビューコントローラのviewDidLoadに配置しました。しかし、次に、どのようにView Controllerの名前を設定するのですか。つまり、 "YOUR_TERMS_CONTROLLER"の名前を認識させるにはどうすればいいですか? – jac300

+0

YOUR_TERMS_CONTROLLERは、ユーザーが条件に同意した後に表示されるView Controllerです。コードを配置する正しい場所は、用語のコントローラを呼び出すビューの内側にあり、用語を呼び出すかどうかは担当者の責任です。疑問がある場合は、質問を編集してコードを入力してください。 – alexandresoli

12

受け入れ
if ([[NSUserDefaults standardUserDefaults] boolForKey:@"TermsAccepted"]){ 
    //proceed with app normally 
} 
else{ 
//show terms 
} 

、次のコードは、デフォルト設定を変更します:用語は、このように、たとえば、受理された場合 かを確認する必要があります最新のものはSwiftの回答があります。あなたのアプリの委任


STEP 1

、以下の機能を追加します。

​​3210

これは最初の打ち上げ(Boolsはデフォルトで偽あるとして)ある場合、これは、本質的にfalseにごTermsAcceptedブールを設定します。あなたのルートビューコントローラ(アプリが起動されたときにロードビューコントローラ)で


STEP 2

、あなたは用語が受け入れられたかどうかを確認する方法かと行為を持っている必要がありますそれに応じて。

次の機能を追加します。

override func viewDidAppear(animated: Bool) { 
    if NSUserDefaults.standardUserDefaults().boolForKey("TermsAccepted") { 
     // Terms have been accepted, proceed as normal 
    } else { 
     // Terms have not been accepted. Show terms (perhaps using performSegueWithIdentifier) 
    } 
} 

STEP 3

ユーザーがあなたの条件を受け入れたら、にごTermsAcceptedブールを変更したいです。したがって、用語の受け入れを扱うメソッドの本文に、次の行を追加します。私はこれが役に立てば幸い

NSUserDefaults.standardUserDefaults().setBool(true, forKey: "TermsAccepted") 

ロイック

+0

これは私にとって完璧に機能します。ところで、私がapplicationDidFinishLaunchingではなくdidFinishLaunchingWithOptionsの最初のメソッドを呼び出すのは重要ですか? +1 – CAN

+0

@CANもアップしました。 :) –

+0

私は 'Signal SIGABRT'を私のApp Delegateで取得しています。どうしたの? –

5

スウィフト3版AppDelegate.swiftで

:ルート・ビュー・コントローラにおいて

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 
    if !UserDefaults.standard.bool(forKey: "Walkthrough") { 
     UserDefaults.standard.set(false, forKey: "Walkthrough") 
    } 
} 

用語が受け入れられている
override func viewDidLoad() { 
    super.viewDidLoad() 
    if UserDefaults.standard.bool(forKey: "Walkthrough") { 
     // Terms have been accepted, proceed as normal    
    } else { 
     // Terms have not been accepted. Show terms (perhaps using 
    } 
} 

、またはチュートリアルウォークスルーは終了しました:

UserDefaults.standard.set(true, forKey: "Walkthrough") 
関連する問題