检测多个ViewControllers上的首次启动 - Swift

时间:2016-03-20 18:52:35

标签: ios swift

当第一次用户打开一个标签栏控制器的ViewController时,我试图创建一个UIView弹出窗口 - 我只想要一个消息弹出窗口来解释它是如何工作的,就像教程一样。

我已经实现了第一个ViewController在启动时弹出,但是我想让它检查我的标签栏上多个ViewControllers的首次启动。我不太确定我在这里做错了什么。该视图具有:UIImageView,UITextView和UIButton,我将使用它来点击时隐藏视图。

  override func viewDidLoad() {
    super.viewDidLoad()

    isAppAlreadyLaunchedOnce()
   }

 func isAppAlreadyLaunchedOnce()->Bool{
    let defaults = NSUserDefaults.standardUserDefaults()

    if let isAppAlreadyLaunchedOnce = defaults.stringForKey("isAppAlreadyLaunchedOnce"){
        print("App already launched")

        return true
    }else{
        backgrdView.hidden = false
        messageView.hidden = false
        textView.hidden = false
        okButton.hidden = false
        tobysLabel.hidden = false


        return false
    }
}


@IBAction func okButtonTapped(sender: UIButton) {

    backgrdView.hidden = true
    messageView.hidden = true
    tobysLabel.hidden = true
    textView.hidden = true
    okButton.hidden = true
}

2 个答案:

答案 0 :(得分:1)

而不是检查isAppAlreadyLaunchedOnce而不是检查ViewController的启动。所以firstVC是启动添加到userDefaults firstVC为true。如果启动秒,则将secondVC设置为true。所以这将维护单个VC的userDefaults。点击“确定”后设置UserDefaults。然后在检查每个VC的firstLaunch时在所有VC中执行此操作。请为不同的VC保持密钥不同。

func isAppAlreadyLaunchedOnce()->Bool{
let defaults = NSUserDefaults.standardUserDefaults()
if defaults.boolForKey("firstVC") {
    print("First VC launched")
    return true
}else{
    backgrdView.hidden = false
    messageView.hidden = false
    textView.hidden = false
    okButton.hidden = false
    tobysLabel.hidden = false
    return false
}
}


@IBAction func okButtonTapped(sender: UIButton) {
    backgrdView.hidden = true
    messageView.hidden = true
    tobysLabel.hidden = true
    textView.hidden = true
    okButton.hidden = true
    NSUserDefaults.standardUserDefaults().setBool(true, forKey: "firstVC")
}

答案 1 :(得分:0)

我用它来检测特定班级的发射。

它使用类类型名称描述作为关键字,以在检测到首次启动后在userDefaults中设置一个真值。这样可以减少使用字符串设置密钥的需求,也无需将UserDefaults手动设置为true。

final class LaunchChecker <Entity> {

var wasLaunchedBefore: Bool {
    return defaults.bool(forKey: self.entityName)
}

let entityName: String
let defaults: UserDefaults

init(for entity: Entity.Type, defaults: UserDefaults = UserDefaults.standard) {
    self.entityName = String(describing: entity)
    self.defaults = defaults
}

func isFirstLaunch() -> Bool {
    if !wasLaunchedBefore {
        defaults.set(true, forKey: entityName)
        return true
    }
    return false
  }
}

用法:

if LaunchChecker(for: MyViewController.self).isFirstLaunch() {
   doSomething()
}