当第一次用户打开一个标签栏控制器的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
}
答案 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()
}