我的故事板上有一个popOver视图。我有一个关闭按钮,可以从视图中删除popOver。但是我还想检查popOver是否已经启动/显示给用户。
我被迫在AppDelegate中使用userDefaults吗?我可能没有权限在需要执行此操作的实际生产应用中更改AppDelegate。
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var popOne: UIButton!
@IBOutlet weak var popTwo: UIButton!
// Using the popOver UIView NOT as a specialized UIView Class
@IBOutlet var PopOver: UIView!
@IBOutlet weak var dismissButton: UIButton!
@IBOutlet weak var popOverLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
PopOver.layer.cornerRadius = 10
}
func checkStatus() {
// check if the popOver view has already been presented
// ONLY present popOver is user hasn't seen it yet.
// if userStatusType == .complete
// run confetti popOver
// else if != .complete
// run the non-confetti overlay
}
// popOver One Action
@IBAction func popOneAction(_ sender: Any) {
// dismiss buttons enabled
popOne.isEnabled = false
popOne.backgroundColor = .green
popTwo.isEnabled = false
// present the popover
self.view.addSubview(PopOver)
// set the confetti to load only in popOver View
PopOver.clipsToBounds = true
PopOver.startConfetti()
// set the popOver to center view
PopOver.center = view.center
// modify popOver UI elements
popOverLabel.textColor = .green
popOverLabel.text = "GREEN and POP ONE. Notice Buttons in Background are now dismissed. So Press the popOver Button to remove the popOver and return to main VC."
// create a layer over the background VC
// Set the Overlay Color to a light gray
// Set the alpha / opacity to under 50% to keep the main UI still visible.
self.view.backgroundColor = .gray
self.view.alpha = 0.3
}
// popOver Two Action
@IBAction func popTwoAction(_ sender: Any) {
popOne.isEnabled = false
popTwo.isEnabled = false
PopOver.center = view.center
self.view.addSubview(PopOver)
popOverLabel.textColor = .cyan
popOverLabel.text = "YOU DID NOT COMPLETE CHALLENGES THIS MONTH. TRY AGAIN FOR NEXT MONTHS CHALLENGES"
}
@IBAction func dismissAction(_ sender: Any) {
popOne.isEnabled = true
popTwo.isEnabled = true
popOne.backgroundColor = #colorLiteral(red: 0, green: 0.3285208941, blue: 0.5748849511, alpha: 1)
popOverLabel.text = ""
// Dismiss the popOver
self.PopOver.removeFromSuperview()
// Rest the main VC UI
self.view.backgroundColor = .white
self.view.alpha = 1
}
}
这只是测试代码。因此,只需尝试一下这个想法。
答案 0 :(得分:0)
只要用户尚未从设备中删除应用,请使用userdefualt永久保存数据。
var isItTheFirstTime = "false"
,然后在需要时进行检查。
if UserDefaults.standard.string(forKey: ConstantsKey.token) == "false"
{
//show the popup and then set the var to true
UserDefaults.standard.set("true", forKey: isItTheFirstTime)
}
else
{
//don't show the popup
}
答案 1 :(得分:0)
为方便起见使用此扩展名:
extension UserDefaults {
private static let didShowPopOverKey = "didShowPopOverKey"
var didShowPopOverKey: Bool {
get { return bool(forKey: UserDefaults.didShowPopOverKey) }
set { set(newValue, forKey: UserDefaults.didShowPopOverKey) }
}
}
在popOneAction(sender:)
@IBAction func popOneAction(_ sender: Any) {
//Check if the popover hasn't been shown before, or else return
guard !UserDefaults.standard.didShowPopOverKey else {
return
}
//If the popover hasn't been shown before:
//Before exiting the scope set the key in userdefaults to true
defer {
UserDefaults.standard.didShowPopOverKey = true
}
//Your code
popOne.isEnabled = false
popOne.backgroundColor = .green
popTwo.isEnabled = false
// present the popover
self.view.addSubview(PopOver)
// set the confetti to load only in popOver View
PopOver.clipsToBounds = true
PopOver.startConfetti()
// set the popOver to center view
PopOver.center = view.center
// modify popOver UI elements
popOverLabel.textColor = .green
popOverLabel.text = "GREEN and POP ONE. Notice Buttons in Background are now dismissed. So Press the popOver Button to remove the popOver and return to main VC."
// create a layer over the background VC
// Set the Overlay Color to a light gray
// Set the alpha / opacity to under 50% to keep the main UI still visible.
self.view.backgroundColor = .gray
self.view.alpha = 0.3
}