2017-01-23 87 views
0

我正在實施條款&條件視圖進入我的應用程序,用戶必須接受它們才能繼續,然後當它們接受它們時,不再需要通過條款&條件視圖。我跟着一篇關於如何整合UserDefaults的教程,並且如果有人確實接受這些條款,則在本地存儲該值。但是我堅持把它實現到根視圖控制器中。具體卡在我的viewDidAppear功能。 if和else語句中的含義是什麼?僅在首次發佈時顯示視圖 - Swift 3

class TermsAndConditionsViewController: UIViewController, UITextViewDelegate {

@IBOutlet weak var termsTextView: UITextView! { 
    didSet { 
     termsTextView.delegate = self 
    } 
} 

@IBOutlet weak var acceptButton: UIButton! { 
    didSet { 
     acceptButton.isHidden = true 
    } 
} 

func scrollViewDidScroll(_ scrollView: UIScrollView) { 
    acceptButton.isHidden = scrollView.contentOffset.y + scrollView.bounds.height < scrollView.contentSize.height 
} 

override func viewDidAppear(_ animated: Bool) { 
    super.viewDidAppear(animated) 
    if UserDefaults.standard.bool(forKey: "termsAccepted") { 

    } else { 

    } 
} 

@IBAction func acceptButtonTapped(_ sender: Any) { 
    performSegue(withIdentifier: "toPeekView", sender: sender) 
} 

}

+4

可能的重複[如何顯示第一次啓動時的視圖?](http://stackoverflow.com/questions/12878162/how-can-i-show-a-view-on-the-first -launch-only) – JAL

+0

它是否應該出現在第一個ViewController中?或者它是一個分離的ViewController? –

+0

它應該出現在根視圖控制器中,然後如果這些術語被接受,它將檢查它們是否是,並使下一個視圖控制器成爲新的根視圖控制器 – Gar

回答

2

也許,你的意思是 「讓第一次啓動僅的ViewController」。

使用UserDefaults用於此目的是一個好主意,但是,檢查是否長期接受應處於TermsAndConditionsViewController層,相反,它應該在的AppDelegate - application:didFinishLaunchingWithOptions,你可以在它決定是否根視圖控制器應該是TermsAndConditionsViewController或其他ViewController(例如HomeViewController)。

的AppDelegate:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 
    let storyboard = UIStoryboard(name: "Main", bundle: nil) 

    let rootViewController = storyboard.instantiateViewController(withIdentifier: UserDefaults.standard.bool(forKey: "termsAccepted") ? "termsViewControllerID" : "homeViewControllerID") 

    window?.rootViewController = rootViewController 

    return true 
} 

TermsAndConditionsViewController:

class TermsAndConditionsViewController: UIViewController { 
    //... 

    @IBAction func acceptButtonTapped(_ sender: Any) { 
     UserDefaults.standard.set(true, forKey: "termsAccepted") 

     performSegue(withIdentifier: "toPeekView", sender: sender) 
    } 

    //... 
} 

希望這有助於。