3

ユーザーがアプリを初めて開いたときにのみ表示されるウォークスルー画面を開発しています。ここまでで、ウォークスルー ページと PageViewController を作成しました。写真を見てください: ここに画像の説明を入力

ここで同様の質問をたくさん読んで、使用する必要があることを理解しました

  UserDefaults()

AppDelegate 内で使用しましたが、コード内でクラス名とストーリーボード名を使用する方法がわかりませんでした。基本的に、アプリを初めて開いたときに PageViewController が画面に表示され、ユーザーが WalkThroughScreen にあるスタート ボタンをクリックすると、チュートリアル ページが閉じられ、アプリが起動します。

私はこのコードを試しました:

if let isFirstStart = UserDefaults.standard.value(forKey: "isFirstLaunch") as? Bool {
  if defaults.bool(forKey: "isFirstLaunch") {
    defaults.set(false, forKey: "isFirstLaunch")
    let mainStoryboard = UIStoryboard(name: "WalkThroughScreen", bundle: Bundle.main)
    let vc : WalkThroughScreen = mainStoryboard.instantiateViewController(withIdentifier: "PageViewController") as! WalkThroughScreen
    self.present(vc, animated: true, completion: nil)
     }

よく理解できず、TutorialPage を使用していないため、完全に混乱していると確信しています。そのため、誰かがヒントや正しく行う方法の例を残してくれれば非常に感謝します。

4

2 に答える 2

3

はい、そうです、userDefaultsこれを達成するために使用する必要があります。そして、appDelegate() Roel Koops 内でそれを行う必要があります。答えはそれを行う必要がありますが、次のように試すこともできます。

  let launchedBefore = UserDefaults.standard.bool(forKey: "launchedBefore")
    if launchedBefore  {
        print("This is not first launch.")
    } else {
        print("This is first launch.")
        UserDefaults.standard.set(true, forKey: "launchedBefore")
        UserDefaults.standard.synchronize()
        let mainStoryboard = UIStoryboard(name: "Main", bundle: Bundle.main)
        let vc : WalkThroughScreen = mainStoryboard.instantiateViewController(withIdentifier: "WalkThroughScreen") as! WalkThroughScreen
        self.present(vc, animated: true, completion: nil)

    }

そして、必ず宣言してください:let userDefaults = UserDefaults.standard内で使用してdidFinishLaunchingWithOptionsください。

解決策は他にもあるので、もう 1 つ紹介します。

    let userDefaults = UserDefaults.standard

    if !userDefaults.bool(forKey: "launchedBefore") {
        let mainStoryboard = UIStoryboard(name: "Main", bundle: Bundle.main)
        let vc : WelcomeViewController = mainStoryboard.instantiateViewController(withIdentifier: "WalkThroughScreen") as! WelcomeViewController
        self.window?.makeKeyAndVisible()
        self.window?.rootViewController?.present(vc, animated: false, completion: nil)
        userDefaults.set(true, forKey: "launchedBefore")
        userDefaults.synchronize()

    }

ストーリーボードのすべてを 1 行で宣言することもできます。

self.window?.rootViewController = self.storyboard?.instantiateViewController(withIdentifier: "WalkThroughScreen")

ただし、これは 2 つの変数を宣言することを前提としています。

var window: UIWindow?
var storyboard: UIStoryboard?

それがうまくいかない場合は、教えてください。私は助けようとします。

于 2016-11-01T22:53:44.453 に答える