Hola mundo (parte I)

20 April 2008



(Los fuentes del ejemplo están disponibles en el pie del artículo).

Nuestra primera aplicación para iPhone/iPod Touch, como no podía ser de otra manera, es el típico "Hola mundo", en el que vamos a descubrir conceptos básicos de la estructura de una aplicación para iPhone, aunque muy importantes, ya que independientemente de la complejidad de la aplicación que hagamos, son comunes para casi todas.

Abrimos nuestro entorno de desarrollo xCode, y creamos una aplilcación para iPhone, la cual llamaremos "holamundo". (recordamos los pasos ya vistos en el anterior artículo xCode, nuestro entorno de trabajo)

1. FICHERO PRINCIPAL main.m

Desplegamos nuestro nodo principal del arbol de la izquierda y localizamos en fichero principal main.m que se encuentra bajo la categoría de Other Sources, y ayudándonos con la opción Editor situada en la barra de botones superior abrimos el fichero en modo edición (alternando dicho botón nos mostrará una lista de ficheros en la categoría que nos encontremos o bien nos abrirá el editor). Este fichero es el punto principal de nuestra aplicación.


Tras el comentario vemos la inclusión del fichero de cabecera principal del framework UIKit, necesario ya que recordemos que contiene las clases relacionadas con la interfaz gráfica de nuestro iPhone. A continuación nos encontramos con el punto de entrada de nuestra aplicación, la función main.





#import <UIKit/UIKit.h>


int main(int argc, char *argv[])


{


NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];


int retVal = UIApplicationMain(argc, argv, nil, nil);


[pool release];


return retVal;


}



NSAutoreleasePool es la clase encargada de la gesitón de memoria de Cocoa (nuestra API de programación para iPhone) y [pool release] envia un mensaje para liberarla. UIApplicationMain es la encargada de crear el objeto y el delegado de la aplicación e iniciar el ciclo de eventos. Los cuatro parámetros enviados son:




  • argc Número de parámetros recibidos. (Recibido en la función main)

  • argv Lista de argumentos. (Recibido en la función main)

  • principalClassName Nombre de la clase UIApplication. (Si pasamos nil, se asume que es UIApplication)

  • delegateClassName Nombre de la clase desde donde el delegado de la aplicación es instanciado. Si tu asignas al parámetro anterior una subclase de UIApplication, tu debes designar la subclase como el delegado obligatoriamente. En definitiva la instancia de dicha subclase recibe los mensajes como delegado de la aplicación. (Parámetro opcional).


2. FICHERO DELEGATE holamundoAppDelegate.m

El objeto asignado como delegate lo hemos definido en el cuarto parametro de nuestra función UIApplicationMain como ya hemos visto en el punto anterior. Este proceso asigna a dicha clase la posibilidad de recibir los mensajes que se procesen en la aplicación. Por defecto, tal y como ha sido creado nuestro proyecto de ejemplo, en la clase delegada viene definido el método applicationDidFinishLaunching el cual recibirá un mensaje de UIApplication cuando la aplicación termine de cargarse.



- (void)applicationDidFinishLaunching:(UIApplication *)application

{

window = [[UIWindow alloc] initWithFrame:[[UIScreen 

   mainScreen] bounds]];

contentView = [[MyView alloc] initWithFrame:[window bounds]];


[window addSubview:contentView];

[window makeKeyAndVisible];

}

El asistente de creación de nuestro proyecto incluye al igual que la clase delegada (holamundoAppDelegate), una clase que implementa la funcionalidad de la vista (MyView) que es la región contenida dentro de nuestra ventana. Nuestra clase de vista, la cual hereda de UIView, es utilizada para organizar de forma mucho más estructurada nuestra aplicación y para entenderlo bien solo debemos de pensar que una aplicación puede y debe tener múltiples vistas. Igualmente UIView es la clase proporcionada para gestionar todo tipo de animaciones y movimientos que vemos en cualquier aplicación de iPhone.


Volviendo al párrafo anterior, cuando recibimos el mensaje en el momento que nuestra aplicación termina de cargarse (applicationDidFinishLaunching) mostramos el contenido de nuestra vista, no sin antes inicializar nuestra ventana con el tamaño de la totalidad de la pantalla de nuestro iPhone e inicializar nuestra vista con el tamaño de nuestra ventana (initWithFrame).



3. FICHERO VISTA MyView.m

El método initWithFrame es el método que vamos a utilizar para la creación del contenido de nuestra vista (definido por defecto por nuestro asistente de creación de proyecto). Los objetos padre de nuestra vista se denominan supervistas y los objetos hijos subvistas. Al objeto padre principal de nuestra vista se accede mediante super.


A continuación crearemos una etiqueta de texto del tipo UILabel para mostrar el contenido de "Hola mundo". Dicha etiqueta la definiremos como una propiedad de la siguiente manera:







    1. En nuestro fichero de cabecera MyView.h dentro de la definición de nuestra clase (UILabel *label;)

    2. A continuación de nuestra clase, haciendo coincidir el mismo nombre.

    3. En nuestro fichero de implementación MyView.m, mediante la directiva @synthesize la cual implementa automáticamente los métodos getter/setter de nuestra propiedad.




Creamos un rectángulo para indicar el tamaño de nuestra etiqueta mediante CGRect. Creamos el objeto label y definimos color de texto, alineación, tipo de fuente y contenido. Añadimos el objeto label como una subvista dentro de nuestra vista (addSubview).


- (id)initWithFrame:(CGRect)frame {


if (self = [super initWithFrame:frame])


{


self.backgroundColor = [UIColor whiteColor];


CGRect labelFrame = CGRectMake(40, 200, 220, 30);



self.label = [[UILabel alloc] initWithFrame:labelFrame];


self.label.textColor = [UIColor


colorWithRed:0 green:0 blue:0 alpha:1.0];


self.label.textAlignment = UITextAlignmentCenter;


self.label.font = [UIFont systemFontOfSize:30];


self.label.text = @"Hola Mundo";


[self addSubview: self.label];


}


return self;


}



Compilamos, ejecutamos y ahi tenemos nuestra primera aplicación.

Gracias a nuestro asistente de creación, completando la creación de UIApplication, holamundoAppDelegate y MyView hemos conseguido nuestra primera aplicación, sin necesidad de utilizar el editor de recursos Interface Builder (que en breve ya veremos).

Aplicación de ejemplo: holamundo.zip
Hola mundo (parte I)

Comentarios recientes

  • 26 September 2009
    pepe dijo:

    Tengo una duda... como se pone un label con salto de linea? osea varias lineas...

  • 23 August 2009
    Davix dijo:

    Solo un apunte, en el punto donde se declara la propiedad el segundo punto no queda muy claro, lo que se debe hacer. Solo explicar que lo que hay que hacer es declarar la siguiente propiedad: @property (nonatomic, retain) UILabel *label; en la zona de declaración de métodos. Por lo demas un 10.

  • 08 July 2009
    Fire_tony dijo:

    Creo que sería conveniente actualizar un poco los tutoriales para las versiones más nuevas, ya que no se pueden hacer ya de esos proyectos. Con unos ligeros comentarios entre paréntesis para las nuevas versiones estaría más que perfecto.

  • 16 May 2008
    Falete dijo:

    La explicación es bastante generosa en detalles y ambiciosa en su fondo. Aunque yo hubiera usado un 'Hola Cordoba'. Bromas aparte 'Sobresaliente'.

Deja un comentario

Escrito por:

Administrador

Sin categoría
iPhonexCodeUILabelUIViewiPod TouchCocoaCGRectUIApplication

Utilizamos cookies propias y de terceros para mantener la sesión o sus preferencias, recopilar estadísticas y proporcionar contenidos conforme a sus intereses. Si continua navegando, utiliza los servicios de la web o pulsa el botón, está aceptando su instalación y el uso que hacemos de ellas. Puede obtener más información sobre como revocar su consentimiento o cómo cambiar la configuración en este enlace.