2017-01-23 3 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 при первом запуске Only".

Использование UserDefaults для этой цели является хорошей идеей, однако, проверить, если этот термин принят должен не быть на TermsAndConditionsViewController слое, вместо этого, он должен быть в AppDelegate - application:didFinishLaunchingWithOptions, вы можете решить, в этом ли корень ViewController должен быть 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) 
    } 

    //... 
} 

Надеется, что это помогло.

Смежные вопросы