38 votes

Comment créer des interfaces Cocoa sans Interface Builder?

Je préfère créer mes interfaces en programmant. Me semble que si tous les docs sur l'Apple Developer supposons que vous êtes en utilisant l'Interface Builder. Est-il possible de créer ces interfaces par programmation, et si oui, où dois-je commencer à apprendre sur la façon de le faire

Je pensais que le document pertinent pour ce, si possible, serait dans cette section: http://developer.apple.com/referencelibrary/Cocoa/idxUserExperience-date.html

36voto

Conal Points 9874

J'aime la question, et j'aimerais aussi savoir de ressources pour aller de l'IB-moins. De l'utilité (le "pourquoi") est limitée que par l'imagination. Sur le dessus de ma tête, voici quelques raisons possibles du programme de l'Isu explicitement:

  • Mise en œuvre d'une meilleure Interface Builder.
  • La programmation dynamique de l'Isu, c'est à dire, ceux dont la structure n'est pas connaissable de manière statique (à la compilation/xcode temps).
  • La mise en œuvre du Cacao, dans le back-end d'une croix-plate-forme de bibliothèque ou de la langue de l'Isu.

Il y a une série de messages de blog sur le travail sans une plume et une description récente de Michael Mucha sur le cacao-dev.

23voto

Peter Hosey Points 66275

Je préfère créer mes interfaces en programmant.

Pourquoi? Interface Builder est plus facile et plus rapide. Vous ne pouvez pas écrire une faute de frappe par glisser-déposer, et vous n'obtenez pas ces oh-so-pratique de l'Aqua guides lorsque vous êtes en train de saisir des rectangles à la main.

Ne vous battez pas. Interface Builder est votre ami. Laisser vous aider.

Si vous insistez sur les gaspiller votre temps et d'énergie de la rédaction de votre INTERFACE utilisateur dans le code:

Pas basés sur des documents (généralement bibliothèque de base, comme le Mail, iTunes, iPhoto): Créer une sous-classe NSObject, instancier et d'en faire la demande à son délégué et un délégué de l' applicationDidFinishLaunching: méthode, créer une fenêtre, de le remplir avec des points de vue, et de l'ordre de l'avant.

Document de base (comme TextEdit, Aperçu, de QuickTime Player): En makeWindowControllers méthode dans votre sous-classe de NSDocument, créer votre windows (et les remplir avec des points de vue) et de créer une fenêtre de contrôleurs pour eux, faire en sorte d'envoyer vous-même addWindowController: pour chaque fenêtre contrôleur.

19voto

Everett Zufelt Points 161

Comme un aveugle développeur, je peux dire que l'IB n'est pas compatible avec VoiceOver (le haut-lecteur d'écran sous mac OS X).

Cela signifie que, sans accès à la solide documentation sur l'utilisation de Cacao sans IB je ne peux pas développer des applications pour OS X / iPhone dans le Cacao, ce qui signifie que j' (ironiquement) ne peut pas développer facilement des applications qui sont accessibles aux aveugles (et tous les autres) sur OS X / iOS.

Ma solution actuelle, que je préfère ne pas utiliser, est Java + SWT, bien sûr, cela fonctionne pour OS X, pas tellement pour iOS.

4voto

Paulo Points 41

En fait, IB devient totalement inutile lorsque vous commencez à écrire vos propres classes d’UI. Disons que vous créez votre propre bouton utilisant un système de skin basé sur un plist. Vous pouvez également créer une barre d’outils dynamique qui charge et décharge les éléments en fonction de la sélection de l’utilisateur.

IB n'accepte pas les éléments d'interface utilisateur personnalisés. Par conséquent, une interface plus complexe ne peut pas l'utiliser. Et OUI vous voudrez faire des choses plus complexes que l’UIKit vous donne.

3voto

Eonil Points 19404

Bien que cela se calme un peu vieux... J'ai essayé plusieurs fois de le faire tout seul avec de la programmation. C'est difficile, mais possible.

Mise à jour: J'ai posté une autre question pour ce problème spécifique: selon la Vue NSOutlineView sans PLUME?, et maintenant Je crois que tout peut être fait de manière programmatique, mais c'est incroyablement dur sans la consultation d'Apple ingénieurs en raison du manque des informations ou des exemples.


C'est hors du sujet, mais je tiens à noter pourquoi je préfère par programmation façon.

Je préfère aussi par programme. Parce que

  • Statique de la mise en page de l'outil ne peut pas gérer quoi que ce soit dynamique.
  • Reproduction même INTERFACE utilisateur de l'état à travers de multiples Pointes est dur. Tout est implicite ou cachée. Vous avez besoin de visiter tous les panneaux pour trouver les paramètres. Ce genre de travail est très facile de faire l'erreur - erreur amical.
  • La gestion cohérente de l'état est dur. Parce que de reproduire le même look est dur.
  • Automatisation impossible. Vous ne pouvez pas faire de l'auto-générés formulaire de saisie.
  • Paramètre indirection comme la variable taille de l'élément choisi par l'utilisateur n'est pas possible.
  • Visant petit point est beaucoup plus difficile que de frapper le doigt touches de taille à emplacement fixe - c'est drôle que ce grave problème de convivialité pour les développeurs!
  • IB parfois vis. Ce qui signifie qu'il est compilable, et travaille encore, mais quand j'ai ouvert la source, il semble cassé et de supplémentaires de montage devient impossible. (vous ne pouvez pas vécu cela, mais si XIB fichier passe complexe, ce qui doit arriver)
  • C'est de l'image en fonction de sérialisation. Le concept est bon. Mais le problème, c'est l'image de base seulement. L'IB ne garde pas le code source pour nettoyer le démarrage, en relisant le code source. Nettoyer le démarrage est très important pour garantir spécifique de l'état. Aussi, nous ne pouvons pas corriger les bugs dans le code source. Bug juste à empiler à l'infini. C'est la raison principale pourquoi nous ne pouvons pas reproduire l' égalité(pas semblable à la recherche) de l'INTERFACE utilisateur de l'état de l'IB.

Bien sûr, ces étoffes peuvent être résolus par le post-traitement PLUME de l'INTERFACE utilisateur, mais si nous avons de tout configurer à nouveau, il n'y a pas de raison d'utiliser de l'IB au premier abord.

Avec le texte du code, il est facile de reproduire le même état, il suffit de copier le code. Aussi facile à inspecter et à la fixation de mal partie - parce que nous avons le plein contrôle. Mais de l'IB, nous n'avons aucun contrôle sur le noyau dur de détails.

L'IB ne peut pas être la solution ultime. C'est comme un Photoshop, mais même Photoshop propose de texte à base de script. GUI est un déplacement de programme, et non pas une image statique ou graphique. Un IB approche est complètement faux, même pour l'édition visuelle de l'interface graphique. Si vous êtes l'une des Apple des gens de cette lecture, je vous prie de supprimer toute dépendance à l'IB complètement dès que possible.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X