[SWIFT] Une fonction qui ne s'affiche qu'une seule fois pendant l'exécution d'Alert et ne l'affiche plus jamais

Choix courants dans la boîte de dialogue

Motif ① OK

Motif ② Ne plus afficher

J'ai essayé de mettre en œuvre chacun, alors prenez-en note.

Préparation pour définir Flag sur True et ne pas s'afficher au démarrage après le démarrage de l'application et en appuyant sur OK dans la boîte de dialogue

DialogHelper


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

Pour l'empêcher de s'afficher à nouveau jusqu'à ce qu'il soit désinstallé Préparation des paramètres par défaut de l'utilisateur pour enregistrer les données qui ne seront pas effacées même après la fermeture de l'application et les données des paramètres utilisateur

UserDefaultsKey


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

Créer une alerte dans ViewController comme ceci Créez deux méthodes pour déterminer si vous devez émettre une alerte.

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()
    }

Quand je l'ai essayé, le bouton OK et le bouton Never Again fonctionnaient bien.

Au fait, j'ai fait une mise en page comme celle-ci. N'oubliez pas de regarder viewDidLayoutSubviews ().

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

Une fonction qui ne s'affiche qu'une seule fois pendant l'exécution d'Alert et ne l'affiche plus jamais
Trouvez une valeur pratique pour avoir une méthode et en faire un ValueObject
[Rails] Volume qui affiche les favoris et une liste de favoris