[SWIFT] Eine Funktion, die nur einmal angezeigt wird, während Alert ausgeführt wird, und nie wieder angezeigt wird

Allgemeine Auswahlmöglichkeiten im Dialog

Muster ① OK

Muster ② Nie wieder anzeigen

Ich habe versucht, jedes zu implementieren, also notieren Sie es sich.

Vorbereitung für das Setzen von Flag auf True und nicht angezeigt während des Starts, nachdem die Anwendung gestartet und im Dialogfeld auf OK gedrückt wurde

DialogHelper


class DialogHelper {
    
    static let shared = DialogHelper()
    var dialogDidSee = false
    
    func getDialogStatus()->Bool{
     
        return dialogDidSee
    }
    
    func setDialogStatus(_ flag:Bool){
        
        dialogDidSee = flag
    }
}

So verhindern Sie, dass es bis zur Deinstallation erneut angezeigt wird Vorbereitung der Benutzerstandards zum Speichern von Daten, die auch nach dem Schließen der Anwendung nicht gelöscht werden, und Daten der Benutzereinstellungen

UserDefaultsKey


enum UserDefaultsKey: String {
    
    case dialogNoMore = "dialog_neverAgain"
    
    func initalValue<T>()-> T?{
        switch self{
        case .dialogNoMore:
            return false as? T
            
        default:
            return nil
        }
    }
}

Erstellen Sie eine Warnung in ViewController wie folgt Erstellen Sie zwei Methoden, um zu bestimmen, ob Sie eine Warnung ausgeben sollen.

ViewController


    func showDialogIfNeed(){
        
        let didSee = DialogHelper.shared.getDialogStatus()
        let neverSee = UserDefaults.standard.bool(forKey: UserDefaultsKey.dialogNoMore.rawValue)
        
        if neverSee {
            return
        }else{
            if didSee {
                return
            }else {
                createDialog()
            }
        }
    }

    func createDialog(){
        
        let alert:UIAlertController = UIAlertController(title: "Here is a message for you!", message: "", preferredStyle: .alert)
        
        let okAction:UIAlertAction = UIAlertAction(title: "OK", style: .default, handler: {
            (action:UIAlertAction!) -> Void in
            DialogHelper.shared.setDialogStatus(true)
        })
        
        let neverAgainAction:UIAlertAction = UIAlertAction(title: "Never remind me", style: .default, handler: {
            (action:UIAlertAction!) -> Void in
            UserDefaults.standard.set(true, forKey: UserDefaultsKey.dialogNoMore.rawValue)
        })
        alert.addAction(okAction)
        alert.addAction(neverAgainAction)
        
        present(alert, animated: true, completion: nil)
    }

ViewController


override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        showDialogIfNeed()
    }

Als ich es versuchte, funktionierten die OK-Taste und die Nie wieder-Taste einwandfrei.

Übrigens habe ich so ein Layout gemacht. Vergessen Sie nicht, viewDidLayoutSubviews () anzusehen.

ViewController


let label = UILabel()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        view.backgroundColor = UIColor.brown
        label.text = "Please see the Dialog"
        label.textAlignment = .center
        view.addSubview(label)
    }
    
    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
        label.frame = view.bounds
    }
    
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        showDialogIfNeed()
    }

Recommended Posts

Eine Funktion, die nur einmal angezeigt wird, während Alert ausgeführt wird, und nie wieder angezeigt wird
Suchen Sie einen geeigneten Wert für eine Methode und machen Sie sie zu einem ValueObject