2017-01-04 4 views
0

Я немного новичок в iOS Development в целом. Я пытаюсь создать приложение для журнала, но борюсь с чем-то, что многие из вас могут понять больше, чем я. Я пытаюсь загрузить определенное представление, основанное на аргументе. В моем случае, в первой загрузке приложений, я хочу загрузить представление «Настройка» в качестве страницы по умолчанию. Но после первой загрузки (например, после того, как пользователь установил свой профиль или что-то еще), я хочу загрузить представление «Мастер» (страница, на которой отображается необходимая информация, такая как создание новой записи журнала и т. Д.)Загрузка определенных видов

в настоящее время у меня есть этот код внутри моего viewDidLoad:

override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 
     let userDefaults = UserDefaults.standard 
     if userDefaults.value(forKey: "firstTimeLoad") as? Bool != nil { 
// FIXME: Add code which loads the setup view 

      userDefaults.setValue(true, forKey: "firstTimeLoad") 
      userDefaults.synchronize() 
     } else if userDefaults.value(forKey: "firstTimeLoad") as? Bool == nil { 
// FIXME: Add code which hides the Setup view and loads the Master view. 
     } 
    } 

Я попробовал несколько вещей, такие как загрузка конкретного вида с loadView, но ничего не похоже на работу.

+0

Я бы сказал, было бы легче сделать это, используя разные 'UIViewControllers' вместо' UIViews' –

ответ

0

Ах, вы должны сделать это с помощью AppDelegate.swift

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 
    // Override point for customization after application launch. 
    let userDefaults = UserDefaults.standard 
    //If you have key, push your master view. 
    if userDefaults.value(forKey: "firstTimeLoad") as? Bool != nil { 
     return loadMasterViewController() 
    } else { 
     userDefaults.setValue(true, forKey: "firstTimeLoad") 
     userDefaults.synchronize() 
    } 
    return true 
} 

func loadMasterViewController() -> Bool { 
    self.window = UIWindow(frame: UIScreen.main.bounds) 
    let storyboard = UIStoryboard(name: "Main", bundle: nil) 
    let masterViewController = storyboard.instantiateViewController(withIdentifier: "MasterViewController") 
    self.window?.rootViewController = masterViewController 
    self.window?.makeKeyAndVisible() 
    return true 
} 
0

Это легко сделать:

Результат:

enter image description here

В вашем VC1:

import UIKit 

class ViewController: UIViewController { 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 

     let userDefaults = UserDefaults.standard 
     userDefaults.setValue(false, forKey: "firstTimeLoad") // you can set firstTimeLoad's value for vc2 to load different view. 
     userDefaults.synchronize() 
    } 

} 

В вашем VC2:

import UIKit 

class ViewController2: UIViewController { 

var view1:UIView? 
var view2:UIView? 

override func viewDidLoad() { 

    super.viewDidLoad() 

    view1 = UIView.init(frame: UIScreen.main.bounds) 
    view1?.backgroundColor = .red 
    view2 = UIView.init(frame: UIScreen.main.bounds) 
    view2?.backgroundColor = .blue 


    // Do any additional setup after loading the view, typically from a nib. 
    let userDefaults = UserDefaults.standard 
    if userDefaults.value(forKey: "firstTimeLoad") as? Bool == false { 
     // FIXME: Add code which loads the setup view 

     self.view.addSubview(view1!) 


     userDefaults.setValue(true, forKey: "firstTimeLoad") // attention: there I changed the firstTimeLoad value to true, so next time you run in vc1, will load the blue view. 
     userDefaults.synchronize() 
    } else if userDefaults.value(forKey: "firstTimeLoad") as? Bool == true { 
     // FIXME: Add code which hides the Setup view and loads the Master view. 

     self.view.addSubview(view2!) 
    } 
} 
} 
Смежные вопросы