iPhone SecondApp: Devinez le nombre - Partie 2
Lundi, Juillet 13, 2009Comme prévu dans iPhone FirstApp: Devinez le nombre - Partie 1, nous verrons comment faire une demande pour l'iPhone d'Apple sans utiliser Interface Builder! En effet, supprimer physiquement les fichiers créés par l'Assistant Interface Builder, Xcode. À la fin de ce poste, nous aurons alors une demande identique en tous points à celle présentée en première partie, avec la différence que nous avons atteint tous nos composants visuels, y compris la fenêtre principale, entièrement au code.
La demande déjà fait, si vous ne voulez télécharger, est disponible sur mon référentiel Google Code:
Je tiens à souligner d'emblée comme le code postal de ce poids d'échantillon de moins que la dernière fois! ![]()
Créez le projet
Nous commençons la création de notre projet SecondApp (pour la distinguer de FirstApp), en choisissant cette fois Window-based application:

Maintenant, nous allons supprimer tout ce qui touche à Interface Builder. Supprimez le fichier MainWindow.xib situé dans le dossier Resources même le supprimer du système de fichiers, puis sélectionnez également se déplacer dans la corbeille. En cliquant sur le SecondoApp-info.plist et supprimer la référence à la MainWindow section du fichier de la base principale de nom de plume:

À ce point, nous avons pas de fenêtre, au moins par Interface Builder. Ensuite, ouvrez le main.m situé dans Other Sources et modifier la fonction main() comme ceci:
- int argc, char * argv [ ] ) { int main (int argc, char * argv []) (
- pool = [ [ NSAutoreleasePool alloc ] init ] ; NSAutoreleasePool * pool = [[alloc NSAutoreleasePool] init];
- / / Après avoir supprimé le fichier. Xib nous avons perdu le point
- / / Délégué à l'APP, puis passe à "main"
- UIApplicationMain ( argc, argv, nil , @ "SecondAppAppDelegate" ) ; retVal int = UIApplicationMain (argc, argv, nil, @ "SecondAppAppDelegate");
- ; [Pool release];
- retour retVal;
- )
Puis nous ouvrons SecondAppAppDelegate.me créer la fenêtre principale au moyen de code:
- ) applicationDidFinishLaunching : ( UIApplication * ) application { - (Void) applicationDidFinishLaunching: (UIApplication *) Application (
- / / Obtenir la taille d'écran (320, 480)
- applicationFrame ] ; CGRect windowRect = [[UIScreen Ecran] applicationFrame];
- / / Création d'une fenêtre - comme nous l'avons fait bye bye à Interface Builder
- UIWindow alloc ] initWithFrame : windowRect ] ; UIWindow mainWindow * = [[alloc UIWindow] initWithFrame: windowRect];
- / / Définit le fond de la fenêtre au jaune, de différencier
- / / De la demande antérieure FirstApp
- UIColor yellowColor ] ] ; [SetBackgroundColor MainWindow: [yellowColor UIColor]];
- mainWindow ] ; [SetWindow Self: mainWindow];
- ; [MakeKeyAndVisible Window];
- ; [Communiqué de MainWindow];
- )
Vous pouvez déjà tester l'application, s'il ya une fenêtre jaune, vous avez tout fait correctement!
Dans le fichier SecondAppAppDelegate.h nous pouvons éliminer IBOutlet nécessaire uniquement si vous utilisez Interface Builder. Également ajouter ici les variables globales qui, la dernière fois que nous étions entrés dans le contrôleur. Ensuite, éditez le fichier SecondAppAppDelegate.h
- # <UIKit/UIKit.h> Importation
- UIWindow * window;
- UITextField * nombre;
- UIButton * button;
- int numeroACaso;
- )
- nonatomic, retain ) UIWindow * window; @ Property (nonatomic, conserver) UIWindow * window;
- ) controllaNumero; - (Void) controllaNumero;
- @ End
Encore une fois, nous avons préparé la définition de la controllaNumero comme la dernière fois, mais nous avons enlevé les IBAction parce que nous n'utilisons pas Interface Builder.
Nous construisons l'interface à partir du code
C 'est le temps de créer le code en utilisant toutes les composantes de notre interface. Nous retournons vers le fichier SecondAppAppDelegate.m posizioniamoci avant [mainWindow release] et insérez le code suivant:
- / / Création de la barre de titre
- UINavigationBar alloc ] initWithFrame : CGRectMake ( 0.0, 0.0, 320.0, 44.0 ) ] ; UINavigationBar * myNavigationBar = [[UINavigationBar alloc] initWithFrame: CGRectMake (0.0, 0.0, 320.0, 44.0)];
- = myNavigationBar.barStyle UIBarStyleDefault;
- UINavigationItem alloc ] initWithTitle : @ "Indovina un numero" ] ; UINavigationItem * navigationItem = [[UINavigationItem alloc] initWithTitle: @ "deviner un nombre"];
- navigationItem animated : NO ] ; [PushNavigationItem MyNavigationBar: navigationItem animé: NO];
- myNavigationBar ] ; [AddSubview Window: myNavigationBar];
- / / Création de l'étiquette
- UILabel alloc ] initWithFrame : CGRectMake ( 10, 50, 300, 80 ) ] ; UILabel myLabel * = [[UILabel alloc] initWithFrame: CGRectMake (10, 50, 300, 80)];
- ; = myLabel.backgroundColor [UIColor clearColor];
- ; myLabel.numberOfLines = 2;
- ; myLabel.text = @ "iPhone a conçu un numéro de 1 à 10, essayer de deviner?
- myLabel ] ; [AddSubview Window: myLabel];
- / / Création de la saisie de texte
- initWithFrame : CGRectMake ( 10, 120, 300, 30 ) ] ; = nombre [[UITextField alloc] initWithFrame: CGRectMake (10, 120, 300, 30)];
- numero.borderStyle = UITextBorderStyleRoundedRect;
- numero.textAlignment = UITextAlignmentCenter;
- = numero.keyboardType UIKeyboardTypeNumberPad;
- ; numero.placeholder @ = "Entrer un numéro";
- numero ] ; [AddSubview Fenêtre: nombre];
- / / Créer le bouton
- UIButtonTypeRoundedRect ] ; = touche [buttonWithType UIButton: UIButtonTypeRoundedRect];
- 10, 180, 300, 30 ) ; bottone.frame = CGRectMake (10, 180, 300, 30);
- @ "Premi qui" forState : UIControlStateNormal ] ; [SetTitle Button: @ "Cliquez ici" Forst: UIControlStateNormal];
- self action : @selector ( controllaNumero ) forControlEvents : UIControlEventTouchUpInside ] ; [AddTarget Button: l'action de soi: controllaNumero @ selector () forControlEvents: UIControlEventTouchUpInside];
- bottone ] ; [AddSubview Window: bouton];
- ; [MyLabel release];
- ; [Communiqué de NavigationItem];
- ; [Communiqué de MyNavigationBar];
Depuis le applicationDidFinishLaunching matches viewDidLoad que la dernière fois, juste après la [mainWindow release]; entrées:
- arc4random ( ) % 10 ; numeroACaso = 1 + arc4random ()% 10;
Maintenant, nous pouvons faire est de mettre en œuvre les controllaNumero qui sera identique (hormis le prototype) à celui utilisé la dernière fois:
- ) controllaNumero { - (Void) (controllaNumero
- ) ; NSLog (@ "push-contrôle bouton numérique");
- numero.text integerValue ] ; int numeroInserito = [IntegerValue numero.text];
- , numeroInserito ) ; NSLog (@ "Le nombre entré est% d", numeroInserito);
- numeroInserito <numeroACaso ) { if (numeroInserito <numeroACaso) (
- ; @ Message = "Trop bas ..."
- ( numeroInserito> numeroACaso ) { ) Else if (numeroInserito> numeroACaso) (
- ; @ Message = "trop haut ..."
- ( numeroInserito == numeroACaso ) { ) Else if (numeroInserito == numeroACaso) (
- ; @ message = "Bravo, vous l'aurez deviné;
- arc4random ( ) % 10 ; numeroACaso = 1 + arc4random ()% 10;
- , numeroACaso ) ; NSLog (@ "% Nombre d pensée», numeroACaso);
- )
- UIAlertView alloc ] UIAlertView * alertMessaggio = [[alloc UIAlertView]
- initWithTitle: @ "Réponse"
- Message: message
- Délégué: néant
- cancelButtonTitle: @ "OK"
- ] ; otherButtonTitles: nil];
- ; [AlertMessaggio show];
- ; [AlertMessaggio release];
- ; numero.text @ = "";
- )
On a fini!
Conclusions et considérations
Cet exemple ne fait pas usage direct d'une UIView ou un UIViewController juste parce que je voulais la quitter au plus simple et rationnel que possible et, aussi, pour montrer qu'il ya des éléments qui sont encore nécessaires. Toutefois, pour les objets directement dans la fenêtre de mai ont un certain sens dans cet exemple et dans d'autres contextes sporadiques. L'utilisation de UIView et UIViewController toujours apporter des avantages dans de nombreux autres cas, etdans certains sont pratiquement indispensable, comme nous le verrons dans le futur.














Il n'ya pas de commentaires pour cet article
Laissez un commentaire