Aller au contenu


Photo

Fenetre pour saisie Mot de passe


  • Please log in to reply
10 réponses à ce sujet

#1 Patyom

Patyom

    Cueilleur de cabosses

  • Membre
  • PipPipPip
  • 86 messages

Posté 31 juillet 2017 - 23:22

Bonsoir,

 

Je vais créer un nouveau viewController dans mon appli mais je voudrais le protéger par un mot de passe, voilà mon idée c'est :

 

1 bouton dans un viewController qui affiche ce nouveau viewController et automatiquement déclenche une fenêtre pour demander un mot de passe.

 

J'avais pensé, au départ, passer par un message d'alerte mais j'ai l'impression que l'on ne peut pas saisir de texte dans ce type d'instruction.

 

Comment feriez-vous ?



#2 Joanna Carter

Joanna Carter

    Broyeur de fèves

  • Contrôleur d'arômes
  • 1 999 messages
  • LocationPlestin-les-Grèves (22)

Posté 31 juillet 2017 - 23:59

Faire un nouveau ViewController pour le mot de passe

#3 Pyroh

Pyroh

    Ecabosseur en fèves

  • Membre
  • PipPipPipPip
  • 498 messages

Posté 01 août 2017 - 08:49

Faire un nouveau ViewController pour le mot de passe

+1



#4 Patyom

Patyom

    Cueilleur de cabosses

  • Membre
  • PipPipPip
  • 86 messages

Posté 01 août 2017 - 13:18

Bon, je vais aller dans ce sens

 

J'ai une question sur les retours de variables d'une fonction : elles sont toujours "let" ?

 

Je n'arrive pas à les modifier, j'ai un message comme quoi elles sont immuables

 

Merci



#5 Joanna Carter

Joanna Carter

    Broyeur de fèves

  • Contrôleur d'arômes
  • 1 999 messages
  • LocationPlestin-les-Grèves (22)

Posté 01 août 2017 - 13:56

Ce n'est pas les valeurs renvoyées par les méthodes qui sont immuables, c'est le fait que tu les as mis dans un let.

 

Si tu veux faire une mutation après que l'on a récupéré, il faut assigner la valeur à une var.



#6 Patyom

Patyom

    Cueilleur de cabosses

  • Membre
  • PipPipPip
  • 86 messages

Posté 01 août 2017 - 21:43

ok, je vois mon erreur



#7 Patyom

Patyom

    Cueilleur de cabosses

  • Membre
  • PipPipPip
  • 86 messages

Posté 01 août 2017 - 22:00

Un petit PB avec mon view controller de Mot de passe :

 

mon raisonnement : dans un viewController j'ai un button qui m'affiche le viewController Mot de passe, ensuite une fois que j'ai saisi le MdP, je clique sur un button "OK" qui me lance le viewController autorisé.

maintenant, quand je sors de ce dernier viewController, je me retrouve avec la fenêtre de saisie du MdP, Arrgh !!

 

Le lien entre le Button "OK" du MdP et la fenêtre autorisée est fait avec IB.

 

je ne comprends pas vraiment



#8 Pyroh

Pyroh

    Ecabosseur en fèves

  • Membre
  • PipPipPipPip
  • 498 messages

Posté 02 août 2017 - 16:57

J'avoue que j'ai un peu du mal à comprendre comment tu fais ça sur mac...

Explique nous un peu comment tu présente tes view controllers s'il te plaît. 



#9 Joanna Carter

Joanna Carter

    Broyeur de fèves

  • Contrôleur d'arômes
  • 1 999 messages
  • LocationPlestin-les-Grèves (22)

Posté 03 août 2017 - 11:38

OK, solution :

 

Fichier joint  patyom.png   315,36 Ko   0 téléchargement(s)

typealias CompletionBlock = (PasswordViewController, Bool) -> ()


class PasswordViewController: NSViewController, NSWindowDelegate
{
  var completionBlock: CompletionBlock?
  
  @IBAction func accept(_ sender: NSButton)
  {
    completionBlock?(self, true)
    
    view.window?.delegate = nil
  }
  
  @IBAction func cancel(_ sender: NSButton)
  {
    completionBlock?(self, false)
    
    view.window?.delegate = nil
  }
  
  override func viewDidLoad()
  {
    super.viewDidLoad()
    
    view.window?.delegate = self
  }
  
  func windowWillClose(_ notification: Notification)
  {
    completionBlock?(self, false)
  }
}
class ViewController: NSViewController
{
  override func prepare(for segue: NSStoryboardSegue, sender: Any?)
  {
    guard let segueIdentifier = segue.identifier else
    {
      return
    }
    
    switch segueIdentifier
    {
      case "showPassword":
        guard let controller = segue.destinationController as? PasswordViewController else
        {
          return
        }
        
        controller.completionBlock =
        {
          (controller: PasswordViewController, accept: Bool) in
          
          if accept
          {
            self.performSegue(withIdentifier: "showProtectedView", sender: self)
          }
          
          self.dismissViewController(controller)
      }
      
      case "showProtectedView":
        // prepare protectedView
        print("showProtectedView")
      
      default:
        return
    }
  }
}


#10 Patyom

Patyom

    Cueilleur de cabosses

  • Membre
  • PipPipPip
  • 86 messages

Posté 04 août 2017 - 07:40

Je viens juste de voir comment sont organisées le différents ViewControllers dans ta miniature, là, je comprends pourquoi ma fenêtre MdP ne s'efface pas. J'avais bien compris qu'il fallait faire cette configuration mais le code ne suivait pas.

 

Je vais faire tourner ta solution pour voir comment çà fonctionne 

 

Merci, c'est une solution qui, je pense, va souvent me servir.



#11 Joanna Carter

Joanna Carter

    Broyeur de fèves

  • Contrôleur d'arômes
  • 1 999 messages
  • LocationPlestin-les-Grèves (22)

Posté 04 août 2017 - 10:33

Tu peux améliorer la fenêtre de MdP en faisant :

typealias CompletionBlock = (PasswordViewController, Bool) -> ()


class PasswordViewController: NSViewController
{
  var completionBlock: CompletionBlock?
  
  @IBAction func accept(_ sender: NSButton)
  {
    completionBlock?(self, true)
  }
  
  @IBAction func cancel(_ sender: NSButton)
  {
    completionBlock?(self, false)
  }
  
  override func viewWillAppear()
  {
    super.viewWillAppear()
    
    view.window?.styleMask.remove(.titled)
  }
}





0 utilisateur(s) li(sen)t ce sujet

0 membre(s), 0 invité(s), 0 utilisateur(s) anonyme(s)