passing data vc1 to vc2

bonjour a tous je recherche la solution pour passer le stringvalue d'un NSTexteField du VC1 au VC2
MacOs pas IOS

VC1:
@IBOutlet weak var label: NSTextField!
var vc2 = VC2()

vc2.BGFS.stringValue = label.stringValue

VC2:
@IBOutlet weak var BGFS: NSTextField!

le but de mon app est de pouvoir 2 ViewController
1 pour le control (VC1)
1 en full screen (VC2)

Réponses

  • Merci a toi Draken

  • voila une solution trouve suite au message de Draken

    dance le VC1

    dans le VC2

    le code fonction mais je doit reloader la VC2 pour avoir les info

    si quelqu'un a une solution pour que ca soit en temps réel

  • driccinedriccine Membre
    18 janv. modifié #5

    le but étant d'avoir 2 ViewController et que le VC1 update le VC2 automatiquement

  • Joanna CarterJoanna Carter Membre, Modérateur
    19 janv. modifié #6

    La solution de Draken est pour iOS avec un segue entre les deux view controllers.

    Pour macOS, lorsqu'on a deux vues qui sont ouvert au même temp, la meilleure solution pourrait être de mettre jour la valeur dans le modèle, dont tu devrais tenir une référence dans les deux view controllers ; et, en le mettant à jour, de notifier le deuxième view controller que le changement s'est passé par le moyen d'une notification.

    J'espère que tu as un modèle à part des view controllers et que tu ne garde pas les données dans les contrôles !

  • DrakenDraken Membre

    @Joanna Carter a dit :
    La solution de Draken est pour iOS avec un segue entre les deux view controllers.

    Ce n'est pas ma solution, Nounours .. J'ai juste parlé du principe du MVC et ouvert une conversation. D'autres posteurs ont complétés ensuite le sujet.

  • bonsoir a tous
    donc si je comprend bien je dois m'orienter vers ce schéma

    merci pour vos réponces

  • DrakenDraken Membre

    oui, ce genre de chose.

  • salut a tous sur les conseil de Joanna et de Draken j'ai créé un model

    et donc dans mon VC1

    et dans mon VC2

    mais mon résultat ca n'a pas l'effet escompte

    si quelqu'un a une piste
    merci d'avance a tous

  • DrakenDraken Membre
    20 janv. modifié #11

    Comment veux-tu que cela fonctionne ? Tu crées une variable de type Titres? dans le second contrôleur, sans la connecter à rien. Elle contient forcément une valeur nulle.

    Pour que cela fonctionne, chaque contrôleur doit avoir une variable de type Titres?, pointant toutes les deux sur la même variable Titres située en DEHORS des contrôleurs.

    Ce n'est pas parce que tu as défini un type de variable (struct Titres) que toutes les variables de ce type seront magiquement connectés entre-elles.

    J'ai l'impression que tu débute vraiment dans la programmation. A mon avis, tu devrais laisser acheter une formation vidéo en Swift sur Udemy.com (environ 10 € pendant les promotions). Cela te donneras les bases nécessaires pour aller plus loin.

  • Joanna CarterJoanna Carter Membre, Modérateur
    20 janv. modifié #12

    Le storyboard :

    Et du code :

    // Model.swift
    
    struct Model
    {
      var name: String
    
      var age: Int
    }
    
    extension Notification.Name
    {
      static let modelUpdated = Notification.Name("modelUpdated")
    }
    
    // VC1.swift
    
    class VC1: NSViewController
    {
      lazy var model: Model = Model(name: "Joanna", age: 21)
    
      override func viewDidLoad()
      {
        super.viewDidLoad()
    
        nameField.stringValue = model.name
    
        ageField.integerValue = model.age
      }
    
      @IBOutlet weak var nameField: NSTextField!
    
      @IBOutlet weak var ageField: NSTextField!
    
      override func prepare(for segue: NSStoryboardSegue, sender: Any?)
      {
        guard let wc = segue.destinationController as? NSWindowController,
              let vc2 = wc.contentViewController as? VC2 else
        {
          return
        }
    
        vc2.model = model
      }
    
      @IBAction func update(_ sender: NSButton)
      {
        model.name = nameField.stringValue
    
        model.age = ageField.integerValue
    
        NotificationCenter.default.post(name: .modelUpdated, object: model)
      }
    }
    
    // VC2.swift
    
    class VC2: NSViewController
    {
      var model: Model?
      {
        didSet
        {
          update()
        }
      }
    
      func update()
      {
        guard let model = model else
        {
          nameLabel.stringValue = "< no model >"
    
          ageLabel.integerValue = 0
    
          return
        }
    
        nameLabel.stringValue = model.name
    
        ageLabel.integerValue = model.age
      }
    
      @IBOutlet weak var nameLabel: NSTextField!
    
      @IBOutlet weak var ageLabel: NSTextField!
    
      override func viewWillAppear()
      {
        super.viewWillAppear()
    
        update()
    
        NotificationCenter.default.addObserver(forName: .modelUpdated, object: nil, queue: nil)
        {
          notification in
    
          self.model = notification.object as? Model
        }
      }
    
      override func viewDidDisappear()
      {
        NotificationCenter.default.removeObserver(self, name: .modelUpdated, object: nil)
    
        super.viewDidDisappear()
      }
    }
    
  • Haa oui j'en étais loin en effet , et oui je débute et je vous remercie de tous vos conseils
    merci pour le temps passer
    pour le coup je fait passer ma journée a bien comprendre le code et essayer de le refaire
    si un jour je peux vous renvoyer l'appareil ca sera avec plaisir

Connectez-vous ou Inscrivez-vous pour répondre.