Changer de vue au sein de la fenêtre principale

RocouRocou Membre
30 août modifié dans API AppKit #1

Bonjour,

Je voudrais faire un truc tout con: effacer l'intérieur de ma fenêtre et afficher une nouvelle vue.
Un clic sur une icône de la toolbar, hop, nouvelle vue. Un clic sur une autre icône, paf, retour à la vue originelle. (Sous Mac)

J'ai fait comme je faisais jusqu'en 2011 sous Objective-C mais cela ne fonctionne plus.
Un clic sur une icone de la toolbar interchange la vue mais ensuite les clics sur les icônes de la toolbar n'ont plus aucun effet. Les méthodes d'action associées ne sont plus appelées.
Je trouve bien d'exemple pour iOS mais je n'arrive pas à les adapter pour Mac

Voici mon code:

        self.view.window?.title = "Nouveau titre"
        self.view.window?.contentView = Ma_nouvelle_vue
        self.view.window?.display()

Réponses

  • PyrohPyroh Membre

    On fait plus ce genre de bricoles de nos jours. Le développeur moderne et averti préfèrera utiliser une NSTabView.

    En gros tu ajoute un NSTabViewController dans ton storyboard et tu configure le style en toolbar :

    Tu ajoute les relations vers les vues filles. Ça va ajouter les onglets directement dans la toolbar de la fenêtre.

    Pour changer les titres et icônes tu sélectionne une tab et tu change les valeurs dans l'inspecteur de vue (le panel de droite)

    Ces screens viennent d'un projet open-source à moi. Tu peux le trouver sur Github, il s'appelle Fluor. Va voir le fichier Preferences.storyboard c'est de là que vienne les screens.

    Fouille un peu le projet c'est codé assez proprement (du moins personne ne s'est plaint) mais mal documenté (personne ne s'est plaint non plus). Cependant c'est une app macOS moderne qui utilise les technos mises en avant par Apple jusque récemment (avant SwiftUI quoi). Ça peut t'inspirer.

  • RocouRocou Membre

    Merci @Pyroh
    Ça fonctionne, j'alterne bien entre mes deux vues par contre, je ne peux plus créer d'outlet, ni faire de connections vers des méthodes d'action.
    Un control/glissé d'un NSTextFiled vers mon code ne génère rien du tout. J'imagine qu'aujourd'hui on procède autrement mais comment?

  • PyrohPyroh Membre

    Là va falloir m'aider à comprendre: depuis où veux-tu créer les IBOutlets ? Et surtout vers où ?

    Pareil pour le NSTextField, où est-il placé et surtout a-t-il un lien avec le code en question ? Tu ne peux plus créer d'outlet ou d'action arbitrairement dans n'importe quel fichier. Maintenant Xcode vérifie si le lien que tu essaie de créer cible une classe qui est présente dans la hiérarchie de la vue en question. Par lier j'entends créer un outlet ou une action.

    Par exemple tu pourras lier un NSTextField avec le view controller dans lequel il se trouve ou encore la vue parente. Par contre tu ne pourras pas le lier avec avec le window controller de la fenêtre ni avec un autre view controller qui n'a rien à voir. C'est compliqué à expliquer simplement j'espère que tu vois où je veux en venir ;) .

  • RocouRocou Membre

    Oui, je comprends ce que tu dis mais je ne sais pas comment résoudre cela.

    Le NSTextField est placé dans une vue nommée Pourcentages. Je comprends bien qu'il faille un lien avec le code mais comment faire cela? Faut-il créer un nouveau fichier swift?
    J'ai un fichier ViewController.swift créé automatiquement par Xcode à la création du projet. C'est vers ce fichier que j'essaie de créer Outlets via un control/glissé.

  • RocouRocou Membre
    30 août modifié #6

    Ha, ça y est j'ai trouvé: il fallait que je sélectionne "ViewControlleur" dans class. (de mon nouveau contrôleur. J'avais laissé la zone par défaut.)

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