如何让我的UiAlertController
或UIAlertView
仅在Swift中显示一次?
override func viewDidLoad() {
var defaults: NSUserDefaults = NSUserDefaults.standardUserDefaults()
if let nameIsNotNill = defaults.objectForKey("name") as? String {
self.name.text = defaults.objectForKey("name") as String
}
if let phoneIsNotNill = defaults.objectForKey("phone") as? String {
self.phone.text = defaults.objectForKey("phone") as String
}
var alert = UIAlertController(title: "Disclaimer", message: "WE STRIVES TO PROVIDE ACCURATE, UP-TO-DATE INFORMATION ON THIS APPS.", preferredStyle: UIAlertControllerStyle.Alert)
alert.addAction(UIAlertAction(title: "Agree", style: UIAlertActionStyle.Default, handler: nil))
alert.addAction(UIAlertAction(title: "Disagree", style: UIAlertActionStyle.Default, handler: nil))
self.presentViewController(alert, animated: true, completion: nil)
super.viewDidLoad()
}
答案 0 :(得分:4)
在Bool
命令下声明一个全局import
变量:
var justOnce:Bool = true
你应该这样使用它:
override func viewDidLoad() {
super.viewDidLoad()
var defaults: NSUserDefaults = NSUserDefaults.standardUserDefaults()
if let nameIsNotNill = defaults.objectForKey("name") as? String {
name.text = defaults.objectForKey("name") as String
}
if let phoneIsNotNill = defaults.objectForKey("phone") as? String {
phone.text = defaults.objectForKey("phone") as String
}
if justOnce {
var alert = UIAlertController(title: "Disclaimer", message: "WE STRIVES TO PROVIDE ACCURATE, UP-TO-DATE INFORMATION ON THIS APPS.", preferredStyle: UIAlertControllerStyle.Alert)
alert.addAction(UIAlertAction(title: "Agree", style: UIAlertActionStyle.Default, handler: nil))
alert.addAction(UIAlertAction(title: "Disagree", style: UIAlertActionStyle.Default, handler: nil))
self.presentViewController(alert, animated: true, completion: nil)
justOnce = false
}
}
答案 1 :(得分:3)
我修改了此线程中的代码,以便允许用户“不再显示此消息”。基本上,显示警报并使用户能够在将来禁用警报。
代码如下:
override func viewDidLoad() {
super.viewDidLoad()
....
let AlertOnce = NSUserDefaults.standardUserDefaults()
if(!AlertOnce.boolForKey("oneTimeAlert")){
let alert = UIAlertController(title: "Note:", message: "Some message to be displayed on screen to the user", preferredStyle: UIAlertControllerStyle.Alert)
let DoNotShowAgainAction = UIAlertAction(title: "Do Not Show Again", style: UIAlertActionStyle.Default) { (action:UIAlertAction) in
AlertOnce.setBool(true , forKey: "oneTimeAlert")
AlertOnce.synchronize()
}
let cancelAction = UIAlertAction(title: "OK", style: UIAlertActionStyle.Cancel) {
UIAlertAction in
alert.removeFromParentViewController()
}
alert.addAction(cancelAction)
alert.addAction(DoNotShowAgainAction)
self.presentViewController(alert, animated: true, completion: nil)
}
....
}
我将它放在相关UIViewController的viewDidLoad()
部分中,以便在页面的初始视图/调用时加载。
希望这可以帮助有类似需求的人。
欢迎评论和修改;)
****更新****
我在测试时遇到错误 -
“在分离的视图控制器上呈现视图控制器是 泄气“
我找到了这篇帮助我解决问题的优秀帖子:http://timdietrich.me/blog/swift-presenting-view-controllers-on-detached-view-controllers-is-discouraged/
引用文章:
请注意,我试图在其中呈现UIAlertController class的viewDidLoad函数。这就是问题所在。你明白了 点,视图已加载,但尚未出现。我相信 这就是为什么警告是指“分离的视图控制器”。
我找到的解决方案是显示视图控制器不在 viewDidLoad函数,而是在viewDidAppear函数中。在 该点已加载并正在显示。
所以我更新了我的代码并将相关的块移到了viewDidAppear
部分,一切都很顺利。没有错误。
答案 2 :(得分:0)
只需在AppDelegate.swift文件中添加此代码,它就能完美地运行一次alertview
=======
let AlertOnce = NSUserDefaults.standardUserDefaults() if(!changeAlert.boolForKey("oneTimeAlert")){ var alert = UIAlertView() alert.title = "Welcome" alert.message = "welcome message" alert.addButtonWithTitle("OK") alert.delegate = self alert.show() AlertOnce.setBool(true , forKey: "oneTimeAlert") AlertOnce.synchronize()}