2010-05-25 6 views
2

Je suis un programmeur C# s'intéressant au développement de l'iPhone avec MonoTouch.Comment MonoTouch génère-t-il automatiquement le code XIB?

J'ajoute une nouvelle définition d'interface View à mon projet et double-clique pour l'ouvrir dans Interface Builder. J'ajoute un UIButton. Je sauvegarde le fichier et inspecte le fichier xib.designer.cs, et je ne vois aucune référence au nouveau bouton.

J'ai téléchargé le code de http://monotouchexamples.com/ où je pouvais voir un exemple de code généré automatiquement derrière:

[MonoTouch.Foundation.Connect("infoButton")] 
private MonoTouch.UIKit.UIButton infoButton { 
get { 
return ((MonoTouch.UIKit.UIButton)(this.GetNativeField("infoButton"))); 
} 
set { 
this.SetNativeField("infoButton", value); 
} 
} 

J'ai ouvert MainWindow.xib dans le constructeur d'interface. Je remarque quelques différences. Le propriétaire du fichier est de type UIApplication au lieu de NSObject. Quelle est l'importance de cela? Il existe un objet App Delegate de type AppDelegate. Je ne peux pas ajouter un AppDelegate à ma propre vue, ou au moins je ne peux pas le trouver dans la bibliothèque. Ai-je besoin d'en ajouter un? Je peux voir que les contrôles existants sur MainWindow.xib ont Referencing Outlets à l'App Delegate. J'ajoute un nouveau bouton et je veux l'accrocher. Lorsque je clique et que je fais glisser une nouvelle prise de référence vers le délégué de l'application, un menu contextuel apparaît qui liste les contrôles existants. Comment ajouter un nouvel élément à cette liste, ou d'où vient cette liste?

J'ai été gâté par le monde Visual Studio où je viens de vider un bouton sur un formulaire et commencer à écrire du code pour l'événement click. Quelqu'un pourrait-il fournir quelques indications sur les étapes nécessaires pour que cela fonctionne sur MonoTouch?

Merci,

Patrick

Répondre

1

Ajout d'un bouton par lui-même ne suffit pas. Le bouton n'est pas accessible en dehors de Interface Builder. Vous devez ajouter une sortie et connecter le bouton à la prise dans Interface Builder. Rappelez-vous: les prises sont les membres de votre classe Controller qui obtiennent une référence aux contrôles, vous ne pouvez pas simplement accéder aux contrôles sans eux.

+0

Merci pour la réponse. Où et comment puis-je ajouter un point de vente?Est-ce quelque chose que je dois faire dans le code? Pourriez-vous souligner où les points de vente ont été ajoutés dans ce projet: http://github.com/chrisntr/Monotouch-Examples/tree/master/MonotouchExamples/? –

+0

Les prises sont créées dans Interface Builder, où dépend exactement quelle version de Mac OS X vous utilisez. Je vous suggère de jeter un oeil à un tutoriel pour Monotouch. –

0

Il me semble que le projet que j'ai créé est obsolète - je me souviens qu'il y a eu quelques changements dans la façon dont les boutons générés sont créés dans le fichier du concepteur. Je mettrai à jour le projet bientôt pour vous. Comme Dave l'a dit, pour que le code soit généré automatiquement, vous devez ajouter une sortie avec Interface Builder. Il devrait y avoir un exemple sur cette vidéo ici - http://bit.ly/aWoItN mais le serveur semble être en panne pour le moment.

Hope this helps,

ChrisNTR

1

Comme Dave dit, vous devez ajouter une prise à votre classe de contrôleur, et connectez votre bouton à cette sortie, avant que le code généré automatiquement apparaît. Cela m'a aussi pris au départ.

Vous choisissez votre classe de contrôleur dans la fenêtre de la bibliothèque Interface Builder, choisissez «prises» dans la partie inférieure de la bibliothèque et ajoutez une prise à cet endroit. Vous devez ensuite sélectionner votre bouton, choisir l'onglet des connexions de la fenêtre de l'inspecteur, et faire glisser depuis le cercle "Nouvelle prise de référence" vers votre classe de contrôleur. Interface Builder vous invite alors à choisir une prise de connexion. Ensuite, lorsque vous enregistrez, vous devriez obtenir le code généré automatiquement dans le fichier .xib.designer.cs, et vous devriez pouvoir référencer votre bouton via cette variable de sortie dans votre fichier .xib.cs.