仅显示一次UIView popOver

时间:2018-09-30 20:27:54

标签: ios swift popover

我的故事板上有一个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
    }
}

这只是测试代码。因此,只需尝试一下这个想法。

2 个答案:

答案 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
}