Je contemplerai d'écrire des fonctions d'assistance pour faciliter les modifications simples des éléments de l'UI de mon iPhone Nib. Principalement - je veux accéder à un Uilabel ou à un autre élément, via son nom dans l'interface Builder. Est-ce possible? Y a-t-il une approche plus intelligente?
Dites que je veux faire une application iPhone super simple qui affiche "Hello World". Je commence un nouveau projet, puis ouvrez la nibrage et faites glisser un Uilabel à mon avis et donnez-lui un «nom» de 'lblmain'. Maintenant, supposant que j'ai inclus ma fonction d'assistance pratique, j'aimerais affecter l'étiquette de nouveau texte quelque chose comme ceci: p> maintenant - le truc est que je n'ai pas ajouté de: p> n'importe où dans .h fichier - je viens d'accéder à Cette étiquette de manière dynamique - cela ne serait-ce pas gentil ?! p> Maintenant, pour des applications simples, d'ajouter des étiquettes ou des images supplémentaires, je pourrais les faire glisser dans ma nibr, attribuer des noms dans la fenêtre de l'inspecteur de cet élément, puis accumulez-les immédiatement à l'intérieur du code sans le bégaiement et le tracas de les ajouter dans le fichier .h. p> Motivation H2>
5 Réponses :
Vous pouvez définitivement charger la NIB de manière programmatique, trouver tous les objets et les interroger pour déterminer quels points sur quoi. Il suffit de regarder Chargement de fichiers NIB programmatiquement . Mais le problème est que le nom d'identité de constructeur d'interface n'est pas exposé à l'extérieur de l'IB. Donc, je ne suis pas sûr de ce que vous utiliseriez comme paramètre "ForLabel". Le champ "nom" n'est qu'une commodité pour la fenêtre de document IB. Ce n'est pas une propriété sur nsobject code>. P>
Je savais que j'avais vu une référence à cela avant, mais je ne pouvais pas le placer / le retrouver. Merci. HMM, toutes suggestions concernant une manière inoffensive d'envoyer quelque chose comme un «nom» au code? Comme peut-être ajouter un "indice" dans "l'accessibilité" puis l'effacer au moment de l'exécution - ou quelque chose comme ça?
Je pourrais peut-être pré-traiter le fichier .xib dans les étiquettes, disons, indice.
Nom est à 100% non accessible une fois que l'objet est chargé, quelque chose que j'ai toujours pensé était étrange aussi. P>
Ce qui est accessible est "tag", si vous voulez vraiment accéder à un élément sans définir une prise, vous pouvez définir la valeur (entier uniquement) "étiquette", puis dans la vue SuperView qui contient l'appel de l'élément étiqueté ViewwithTag: code> en passant dans le même entier. N'oubliez pas que la valeur par défaut est "0" alors utilisez autre chose. P>
Je pense que vous pouvez essayer d'ouvrir le XIB dans un éditeur externe sous forme de XML et voyez comment le compilateur le voit, vous pourriez éventuellement faire de la même manière p>
Il peut être fait par l'étiquette d'élément:
Disons que vous avez un fichier UIView XIB appelé «VueView» et à l'intérieur, il y a Uilabel que vous souhaitez y accéder sans câblage. p>
Uilabel * Yourlabel = (Uilabel *) [VienvieviewwithTag: 100];
// Faites ce que vous voulez à votre étiquette.
code> li>
ol>
pour iOS6 + Vous pouvez utiliser le restaurateur au lieu de la balise, pour le rendre plus "lisible", par exemple, vous pouvez définir le même nom dans votre fichier NIB et dans l'ID de restauration.
Si vous ne voulez pas relier à tous les Des points de vente de votre NIB à votre ViewController, vous pouvez toujours y accéder en effectuant une recherche dans votre arborescence de la sous-système actuelle. Notez que l'arrangement Sous-Views est un arborescence (le même arbre que vous pouvez voir dans votre fichier NIB), vous devrez donc faire une certaine récursive si vous avez des vues imbriquées. P>
Par exemple: P> < Pré> xxx pré>
Dans votre fichier NIB, vous devez avoir un bouton avec un restauéridable correspondant à "mynibbuttonView", vous pouvez trouver le Textfield RestorationID dans votre inspecteur d'identité (troisième colonne d'utilitaires) P>
Vous pouvez l'utiliser si vous avez un grand nombre de points de vente, vous ne voulez pas les avoir tous les liés. P> p>
8 mois plus tard, j'ai décidé de creuser un peu. Ce n'est pas une solution complète, mais une fois que vous avez indiqué à un objet que vous avez signalé comme accessible, vous pouvez lire son étiquette via "[LBL AccessibellLabel];" Ce pourrait être un début pour quelqu'un.