Insérer une vue de type inconnu dans l'interface
AliGator
Membre, Modérateur
Bonjour à tous <br />
Voilà j'ai une petite problématique à vous soumettre. J'ai une interface dans laquelle je souhaite intégrer une SFAuthorizationView (laquelle contiendrait ensuite divers éléments évidemment).
Voilà , quelle est votre suggestion de ce côté ? La solution la plus propre est simple que je vois pour l'instant c'est sous-classer SFAuthorizationView comme on créerait une customview, mais si on pouvait l'utiliser directement sans même sous-classer, ça serait vraiment mieux non ?
Et sinon, comment on peut placer sur l'interface dans IB un objet graphique venant d'un autre framework (ici SecurityInterface.framework) sans qu'il gueule ensuite au chargement du NIB ?
Voilà j'ai une petite problématique à vous soumettre. J'ai une interface dans laquelle je souhaite intégrer une SFAuthorizationView (laquelle contiendrait ensuite divers éléments évidemment).
- Soit je la crée par code, ça marche mais c'est un peu lourd surtout s'il faut ensuite créer tout le contenu à la main.
- Si je place une "custom view" (enfin une NSView quoi) dans mon interface sous IB et que je change ensuite sa classe en SFAuthorizationView dans IB, au chargement du NIB quand je run il me met un message dans le log comme quoi il ne connaà®t pas ce type et donc ne peut instancier l'objet (ça se comprend en somme)
- Soit je place une custom view dans mon interface, et par code je la "wrappe" dans une SFAuthorizationView. C'est à dire que je crée une SFAuthorizationView par code, j'enlève ma customview de sa superview et je l'ajoute à cette SFAuthorizationView à la place. En ajustant les frames de ces vues. Ca marche mais il faudrait alors ajuster/copier tous les attributs aussi : les masques pour le resizing, etc... bref toutes ces propriétés qu'on règle dans IB !
- A moins qu'il y ait finalement un moyen, au lieu de "wrapper" ma customview dans une nouvelle SFAuthorizationView, de faire transformer cette customview en SFAuthorizationView... changer sa classe dynamiquement quoi... ? Mouais.
- La dernière solution, la plus propre à mon avis et celle qui devrait venir en premier à l'esprit, est de créer une classe MyAuthorizationView, sous-classe de SFAuthorizationView (et donc aussi de NSView), tout comme on crée une custom view classiquement quoi. Et de régler notre custom view dans IB pour qu'elle utilise cette classe. Classique... mais ça nécessite de créer une sous-classe de SFAuthorizationView... pour rien (pas d'ajout de méthode ni de variable d'instance), du coup je trouve ça un peu bête, non ?
Voilà , quelle est votre suggestion de ce côté ? La solution la plus propre est simple que je vois pour l'instant c'est sous-classer SFAuthorizationView comme on créerait une customview, mais si on pouvait l'utiliser directement sans même sous-classer, ça serait vraiment mieux non ?
Et sinon, comment on peut placer sur l'interface dans IB un objet graphique venant d'un autre framework (ici SecurityInterface.framework) sans qu'il gueule ensuite au chargement du NIB ?
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Non, ça ne se comprend pas... Je l'ai déjà fait plusieurs fois, ça fonctionne très bien ???
Il faut juste glisser le header de cette view sur IB au préalable...
http://developer.apple.com/documentation/Security/Reference/SecurityInterfaceFramework/Classes/SFAuthorizationView_Class/Reference/Reference.html
Ma vue s'affiche nickel, quelle que soit la méthode (sous-classe perso de SFAuthorizationView, NSView classique wrappée en SFAuthorizationView par le code, etc) que j'emploie... j'ai bien pensé à faire le setString et tout marche comme je veux, pas de soucis
...à part....
à part pour le cas où je met directement dans IB que la custom view est une SFAuthorizationView : là j'ai la fameuse erreur lorsque j'exécute mon projet que c'est un objet inconnu (car il n'a pas connaissance du .h).
Pourtant j'ai inclus le SecurityInterface.framework (qui contient SFAuthorizationView.h dans son dossier "Headers") dans mon projet dans Xcode. Et comme avec les custom view habituelles (quand on sous-classe nous-même NSView dans notre projet) j'ai jamais eu ce problème et jamais eu à déposer le .h correspondant dans IB...
...et que c'est la première fois que je souhaite utiliser une NSView issue d'un framework particulier (et d'un type qui n'est pas déjà dans la palette de librairie de IB)...
Bon au final j'ai fini par sous-classer en MyAuthorizationView car c'était pas plus mal ça me permet de gérer 2-3 conneries dedans en plus.
Mais j'ai essayé ta méthode, juste pour me coucher moins c*n ce soir
En effet une fois que j'ai glissé le .h dans la fenêtre principale de IB (MainMenu.xib pour mon cas), si je définis ma custom view dans IB comme étant SFAuthorizationView non seulement il me le propose maintenant dans le drowdown menu, mais en plus il veut bien me la créer.
Merci pour l'astuce
Normalement, dans IB 3 (Leopard), quand IB est syncro avec le projet Xcode (diode verte en bas de la fenêtre), le header est lu automagiquement et pas besoin de l'ajouter à la main comme dans IB2. Non ?
Pour ce qui des classes persos (genre dans Xcode tu fais File -> New File et tu crées une "Objective-C NSView subclass" disons MyView.h/.m histoire de te faire une custom view dans les règles... ben si tu retournes dans IB, et que tu ajoutes une NSView dans l'interface puis modifie (dans l'identity inspector) sa classe en "MyView", là pas de soucis, ça marche.
Depuis IB3 je fais souvent comme ça (plutôt que d'indiquer le nom de ma future classe dans la NSView placée dans IB puis de demander "Write Class Files...") et ça ne m'a jamais causé de soucis.
MAIS ici il s'agit non pas d'une sous-classe que j'ai créé moi-même, mais d'une classe définie dans un Framework (SecurityInterface.framework dans mon cas). Et j'ai beau avoir ajouté ce framework dans mon projet, et dans le group "Linked Frameworks", si j'ouvre (petit triangle) le contenu de SecurityInterface.framework et regarde dans le dossier "Headers" de ce framework, je vois bien entre autres .h le fichier "SFAuthorizationView.h" définissant cette fameuse sous-classe de NSView que je veux utiliser...
Mais même avec le framework ajouté au projet Xcode et donc le header inclus dedans, IB ne reconnait pas dans ce cas tout seul la classe SFAuthorizationView définie dans ledit framework. Dans ce cas particulier il faut faire glisser le .h dans la fenêtre du XIB/NIB dans IB pour qu'il en prenne connaissance.
Je pense que c'est uniquement le cas avec les frameworks, pourtant moi aussi j'aurais pensé qu'il aurait synchronisé automatiquement comme pour les custom class faites maison... mais bon. Le tout c'est de connaà®tre l'astuce