SecondApp iPhone: Adivinar el número - Parte 2
Lunes, 13 de julio 2009Como se preveía en FirstApp iPhone: Adivinar el número - Parte 1 vemos cómo hacer una aplicación para el iPhone de Apple sin necesidad de utilizar el Interface Builder! De hecho, físicamente eliminar los archivos creados por el Interface Builder asistente de Xcode. Al final de este mensaje, entonces tendremos una solicitud idéntica en todos los aspectos al que se hizo en la primera parte, con la diferencia de que podemos lograr todos nuestros componentes visuales, incluyendo la ventana principal, completamente con el código.
La solicitud ya realizados, si sólo desea descargar, está disponible en el repositorio de Google Code:
Debo señalar de inmediato como el código postal de este peso de la muestra menos que la última vez! ![]()
Crear el proyecto
De empezar a crear nuestro proyecto SecondApp (para distinguirlo de FirstApp), aunque esta vez seleccione Ventana de aplicaciones basado en:

Ahora vamos a eliminar todo lo relacionado con Interface Builder. Elimine el archivo MainWindow.xib ubicado en la carpeta Resources incluso eliminarlo del sistema de archivos, a continuación, seleccione también se mueven a la Papelera. Al hacer clic en el SecondoApp-info.plist y eliminar la referencia a MainWindow la sección principal del archivo de nombre de la base NIB:

En este momento no tenemos ninguna ventana, por lo menos a través de Interface Builder. A continuación, abra el main.m ubicado en Other Sources y modificar la función main() así:
- int argc, char * argv [ ] ) { int main (int argc, char * argv []) (
- pool = [ [ NSAutoreleasePool alloc ] init ] ; NSAutoreleasePool * Piscina = [[alloc NSAutoreleasePool] init];
- / / Después de haber eliminado el archivo. Xib hemos perdido el punto de
- / / Delegado a la APP, luego cambia a "mano"
- UIApplicationMain ( argc, argv, nil , @ "SecondAppAppDelegate" ) ; int retval = UIApplicationMain (argc, argv, nil, @ "SecondAppAppDelegate");
- ; [Comunicado de Pool];
- retVal retorno;
- )
Entonces abrimos SecondAppAppDelegate.me crear la ventana principal a través de código:
- ) applicationDidFinishLaunching : ( UIApplication * ) application { - (Void) applicationDidFinishLaunching: (UIApplication *) solicitud (
- / / Obtener el tamaño de la pantalla (320, 480)
- applicationFrame ] ; WindowRect CGRect = [[UIScreen Principal] applicationFrame];
- / / Crear una ventana - como lo hicimos adiós a Interface Builder
- UIWindow alloc ] initWithFrame : windowRect ] ; MainWindow UIWindow * = [[UIWindow alloc] initWithFrame: windowRect];
- / / Establecer el fondo de la ventana a amarillo, para diferenciar
- / / A partir de la solicitud anterior FirstApp
- UIColor yellowColor ] ] ; [SetBackgroundColor MainWindow: [yellowColor UIColor]];
- mainWindow ] ; [SetWindow Auto: mainWindow];
- ; [MakeKeyAndVisible Ventana];
- ; [Liberación MainWindow];
- )
Ya puedes probar la aplicación, si hay una ventana amarilla que hiciste todo bien!
En el archivo de SecondAppAppDelegate.h podemos eliminar IBOutlet necesario sólo si el uso de Interface Builder. También añadir aquí que nuestras variables globales, la última vez que había entrado en el controlador. A continuación, edite el archivo SecondAppAppDelegate.h
- # <UIKit/UIKit.h> De importación
- UIWindow * window;
- * Número UITextField;
- UIButton * button;
- numeroACaso int;
- )
- nonatomic, retain ) UIWindow * window; @ Propiedad (no atómica, retener) UIWindow * window;
- ) controllaNumero; - (Void) controllaNumero;
- @ End
Una vez más, hemos preparado la definición de la controllaNumero como la última vez, pero hemos eliminado la IBAction porque no estamos usando el Interface Builder.
Creamos la interfaz de código de
Es el momento de crear código con todos los componentes de nuestra interfaz. Volvemos al archivo SecondAppAppDelegate.m posizioniamoci antes de [mainWindow release] e inserte el siguiente código:
- / / Crear la barra de título
- 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: @ "Adivina un número"];
- navigationItem animated : NO ] ; [PushNavigationItem MyNavigationBar: navigationItem animados: NO];
- myNavigationBar ] ; [AddSubview ventana: myNavigationBar];
- / / Crear la etiqueta
- UILabel alloc ] initWithFrame : CGRectMake ( 10, 50, 300, 80 ) ] ; MyLabel UILabel * = [[UILabel alloc] initWithFrame: CGRectMake (10, 50, 300, 80)];
- ; = myLabel.backgroundColor [clearColor UIColor];
- ; myLabel.numberOfLines = 2;
- ; MiEtiqueta.Text = @ "El iPhone ha diseñado un número del 1 al 10, trata de adivinar?"
- myLabel ] ; [AddSubview ventana: myLabel];
- / / Crear la introducción de texto
- initWithFrame : CGRectMake ( 10, 120, 300, 30 ) ] ; = número [[UITextField alloc] initWithFrame: CGRectMake (10, 120, 300, 30)];
- numero.borderStyle = UITextBorderStyleRoundedRect;
- numero.textAlignment = UITextAlignmentCenter;
- = numero.keyboardType UIKeyboardTypeNumberPad;
- ; numero.placeholder = @ "Introduzca el número";
- numero ] ; [AddSubview Ventana: número];
- / / Crear el botón
- UIButtonTypeRoundedRect ] ; = botón [buttonWithType UIButton: UIButtonTypeRoundedRect];
- 10, 180, 300, 30 ) ; bottone.frame = CGRectMake (10, 180, 300, 30);
- @ "Premi qui" forState : UIControlStateNormal ] ; [SetTitle Botón: @ "Haga clic aquí" Forst: UIControlStateNormal];
- self action : @selector ( controllaNumero ) forControlEvents : UIControlEventTouchUpInside ] ; [AddTarget botón: la acción libre: @ (selector de controllaNumero) forControlEvents: UIControlEventTouchUpInside];
- bottone ] ; [AddSubview Ventana: botón];
- ; [Liberación MyLabel];
- ; [Liberación NavigationItem];
- ; [Liberación MyNavigationBar];
Desde la applicationDidFinishLaunching partidos viewDidLoad como la última vez, justo después de [mainWindow release]; del [mainWindow release]; entró:
- arc4random ( ) % 10 ; numeroACaso = 1 + arc4random ()% 10;
Ahora que podemos hacer es aplicar la controllaNumero que es idéntico (salvo en el prototipo) a la que usó la última vez:
- ) controllaNumero { - (Void) (controllaNumero
- ) ; NSLog (@ "push-control de botón numérico");
- numero.text integerValue ] ; numeroInserito int = [integerValor numero.text];
- , numeroInserito ) ; NSLog (@ "El número introducido es% d", numeroInserito);
- numeroInserito <numeroACaso ) { if (numeroInserito <numeroACaso) (
- ; @ Message = "demasiado bajo ..."
- ( numeroInserito> numeroACaso ) { ) Else if (numeroInserito> numeroACaso) (
- ; @ Message = "demasiado alto ..."
- ( numeroInserito == numeroACaso ) { ) Else if (numeroInserito == numeroACaso) (
- ; mensaje = @ "Bravo, lo has adivinado;
- arc4random ( ) % 10 ; numeroACaso = 1 + arc4random ()% 10;
- , numeroACaso ) ; NSLog (@ "% d Número de pensamiento," numeroACaso);
- )
- UIAlertView alloc ] UIAlertView * alertMessaggio = [[UIAlertView alloc]
- initWithTitle: @ "Respuesta"
- Mensaje: mensaje
- Delegado: Ninguna
- cancelButtonTitle: @ "OK"
- ] ; otherButtonTitles: nil];
- ; [Mostrar AlertMessaggio];
- ; [Liberación AlertMessaggio];
- ; numero.text @ = "";
- )
Ya hemos terminado!
Conclusiones y consideraciones
Este ejemplo no hace uso directo de un UIView o un UIViewController sólo porque me quería ir lo más simple y racional posible y, también, para mostrar que hay elementos que aún es necesario. Sin embargo, para los objetos directamente en la ventana puede tener algún sentido en este ejemplo y en otros contextos esporádicos. El uso de UIView y UIViewController todavía aportar beneficios en muchos otros casos, yen algunos son prácticamente indispensables, como veremos en el futuro.














No hay ningún comentario para este post
Deja tu comentario