2017-08-12 5 views
-2

Ich versuche, eine disclaimerViewController zu meiner Anwendung als die erste viewController, die, wenn akzeptiert, führt den Benutzer auf die entryViewController, und wenn nicht, wird nicht zulassen, dass der Benutzer die Anwendung zu verwenden. Ich möchte jedoch sein, dass, wenn der Benutzer den Haftungsausschluss akzeptiert, er nach dem Öffnen der Anwendung nicht mehr mit der disclaimerViewControleler sondern mit der entryViewController präsentiert wird.Hinzufügen Haftungsausschluss Bildschirm

Ich weiß, dass es etwas mit der Bearbeitung der AppDelegate.swift Datei zu tun hat, aber bin mir nicht sicher, zu starten.

+0

Das schon viele Male gefragt worden ist. Bitte suchen Sie bevor Sie fragen. Hier ist eine Beispiellösung: https://github.com/matnteub/RegistrationExample – matt

+0

Würde es Ihnen etwas ausmachen zu erklären, warum dies als ein Duplikat markiert wurde? Sowohl Ihre Antwort als auch Ihr iOS-Projekt unterstützen keine Disclaimer. –

+0

Pudel und Spaniel sind beide Hunde. Du musst einen Hund machen; es ist nur eine kontingente Tatsache, welche Rasse es ist. Wie ich schon sagte, das Problem der einmaligen Präsentation eines View-Controllers (oder bis der Benutzer einige Anforderungen erfüllt) wird hier bereits ausführlich behandelt. – matt

Antwort

1

Sie müssen Benutzer Wahl in UserDefaults speichern

Der folgende Code Swift wird mit 3

Wenn Sie entryViewController nicht geladen werden soll dann im AppDelegate:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 
     // Override point for customization after application launch. 

     //retrieve values from UserDefaults 
     //for the first time it will be false, because it was not set earlier 
     let isAccepted = UserDefaults.standard.bool(forKey: "isAccepted") 

     if isAccepted == false { 
      //present your disclaimer here 
     }else{ 
      //show entryViewController 
     } 

     return true 
} 

Oder Sie können entryViewController laden und Haftungsausschluss sofort, dann in Ihrem entryViewController:

override func viewDidLoad() { 
     super.viewDidLoad() 

    //retrieve values from UserDefaults 
    //for the first time it will be false, because it was not set earlier 
    let isAccepted = UserDefaults.standard.bool(forKey: "isAccepted") 

    if isAccepted == false { 
     //present your disclaimer here  
    } 
} 

im DisclaimerVC:

0

Die Art, wie ich dies tun würde, ist, indem Sie Ihre disclaimerViewController auf den ursprünglichen View-Controller in Ihrer Storyboard-Datei setzen.

In der schnellen Dateiprüfung, um zu sehen, ob der Benutzer zuvor den Haftungsausschluss in der viewDidLoad Methode akzeptiert hat, wenn nicht, den Code normal funktionieren lassen und den Bildschirm anzeigen, wenn sie den Benutzer auf Ihre drücken entryViewController

Wenn Sie Ihren ersten view-Controller in der AppDelgate festlegen mögen und nicht im Storyboard, hier eine nützliche Verbindung ist: set initial viewcontroller in appdelegate - swift

zu einem neuen Viewcontroller in schnellen Für einen Übergang, hier ist ein nützlicher Link: Switching view controllers in swift

0

Die einfachste Möglichkeit, dies zu implementieren, besteht darin, die Ansichten programmgesteuert zu wechseln.

Stellen Sie sicher, dass Sie die Wiederherstellungs-IDs für Ihre ViewController im StoryBoard festlegen.

class AppDelegate: UIResponder, UIApplicationDelegate { 

    var window: UIWindow? 

    var mainViewController: ViewController? 
    var acceptViewController: AcceptViewController? 


    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 
     // Override point for customization after application launch. 
     let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil) 
     mainViewController = mainStoryboard.instantiateViewController(withIdentifier: "MainView") as? ViewController 
     acceptViewController = mainStoryboard.instantiateViewController(withIdentifier: "AcceptView") as? AcceptViewController 
     if mainViewController == nil { 
      print("mainViewController is nil") 
     } 
     if acceptViewController == nil { 
      print("acceptViewController is nil") 
     } 

     let isAccepted = UserDefaults.standard.bool(forKey: "isAccepted") 

     if isAccepted == false { 
      switchToAcceptViewController() 
     } else { 
      switchToMainViewController() 
     } 
     return true 
    } 

    func switchToMainViewController() { 
     //mainViewController?.selectedIndex = 0 // only needed if the main view controller is a tab view 
     self.window?.rootViewController = mainViewController 
     self.window?.makeKeyAndVisible() 
    } 
    func switchToAcceptViewController() { 
     //mainViewController?.selectedIndex = 0 // only needed if the main view controller is a tab view 
     self.window?.rootViewController = acceptViewController 
     self.window?.makeKeyAndVisible() 
    } 

} 

AcceptViewController

class AcceptViewController: UIViewController { 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     // Do any additional setup after loading the view. 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    @IBAction func acceptAction(_ sender: Any) { 
     UserDefaults.standard.set(true, forKey: "isAccepted") 
     let appDelegate = UIApplication.shared.delegate as! AppDelegate 
     appDelegate.switchToMainViewController() 
    } 

} 

Sie können hier die vollständige Projekt erhalten: https://github.com/ryantxr/legendary-fiesta

Verwandte Themen