martes, 12 de junio de 2012

Aprendiendo Objetive-C para IOS (Dia 4)


Guion del blog de curso de Objetive-C para IOS - DIA 4

nota: Esto es no es curso propiamente dicho, es un diario de autoaprendizaje de objetive-c, que me sirve para afianzar conocimientos, y de paso, tener un diario de referencia, con ejemplos propios de uso del lenguaje.

-------------

Vamos a ver como podemos crear ahora botones, en tiempo de ejecicion. En este ejemplo, voy a ver como crear un botón, nada mas cargar la aplicación. De manera que para eso, lo único que hay que hacer, es ir al método
(void)viewDidLoad del archivo ViewController.m, y escribir el siguiente código, quedando el método de esta manera:





- (void)viewDidLoad
{
    [super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.

    ///////////////////////////////////////////////////////////////////////
    //Voy a crear un boton en tiempo de ejecucion
    //PASO 1: Declaramos el objeto, reservamos memoria, y lo inicializamos
    UIButton *boton=[UIButton buttonWithType:UIButtonTypeRoundedRect];
    
    //PASO 2: Vamos a darle un titulo al boton, que sera la variable numero incrementada en uno cada vez que se pulse
    NSString *titulo=[NSString stringWithFormat:@"Boton numero 1"];
    [boton setTitle:titulo forState:UIControlStateNormal];
    
    //PASO 3: Vamos a agregarle un evento, que al hacer click, ejecute el evento que sea
    //ser otro evento perfectamente.
    [boton addTarget:self action:@selector(pulsame:) forControlEvents:UIControlEventTouchUpInside];
    
    //Establecemos una posicion meciante un CGRect, 
    CGRect botonFrame = CGRectMake(5, 5, 10, 37 );
    [boton setFrame:botonFrame];
    
    //Añadimos dicho boton a la vista en la que estamos
    [self.view addSubview:boton];
    
    ////////////////////////////////////////////////////////////////////////
}

Con esto, nada mas cargar la aplicación, estamos creando un nuevo botón. Solo faltaría, crear el método al que responderá la pulsación del botón, que hemos llamado pulsame. Podria quedar de esta forma:

- (void)pulsame:(Celda *)sender{

//Creamos un objeto llamado cadena, para recoger el nombre del objeto boton
    NSString *cadena=[[NSString alloc] initWithFormat:@"%@", (UIButton *)[sender titleForState:UIControlStateNormal]];

//Lo mostramos con NSLog
    NSLog(@"Has pulsado el %@", cadena); 
    
}

Aunque parezca complicado, lo único que hacemos es, hacer un castro del objeto sendero, diciendo, que se trata de un UIButton, de manera que apartir de ahora, podemos llamarle y recoger valores del mismo botón, o directamente modificar dichos valores, tal como estamos haciendo, con el método titleForState

Acordaos que para ver lo que pasa en consola, podemos scar la consola con COMMANDO+MAY+C

---------------------------

Sabiendo esto, podríamos ahora coger, y crearnos algo un poco mas complejo, como por ejemplo, crearnos 40 botones de golpe, dejando alguna linea de separación cada 8 botones por ejemplo. Esto lo haremos también. Lo podemos hacer también en el método viewDidLoad, quedando así de esta forma:

- (void)viewDidLoad
{
    [super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
    
    //Inicializo el numero de cartas a 0
int numeroCartas;
    numeroCartas=0;
    
    int posicionInicialX=5;
    int posicionInicialY=5;
    int fila=0;
    int modulo=0;
    //Vamos a crear un bucle para crear dinamicamente 40 botones
    for(int i=0; i<48; i++){
    
        /*//Esto para UIButton:
        //PASO 1: Declaramos el objeto, reservamos memoria, y lo inicializamos
        UIButton *boton=[UIButton buttonWithType:UIButtonTypeRoundedRect];
    
        //PASO 2: Vamos a darle un titulo al boton, que sera la variable numero incrementada en uno cada vez que se     pulse
        NSString *titulo=[NSString stringWithFormat:@"%d", numeroCartas++];
        [boton setTitle:titulo forState:UIControlStateNormal];
    
        //PASO 3: Vamos a agregarle un evento, que al hacer click, ejecute el mismo metodo en el que estamos, aunque podria 
        //ser otro evento perfectamente.
        [boton addTarget:self action:@selector(pulsame:) forControlEvents:UIControlEventTouchUpInside];
    
        //Establecemos una posicion meciante un CGRect, hay que calcular la posicion correcta, segun el numero de elmentos
        
        //Hacemos la operacion modulo, para saber donde estamos
        modulo=i%8;
        if(modulo==0){
            fila++;            
        }
        
        CGRect botonFrame = CGRectMake(posicionInicialX+modulo*39, posicionInicialY+fila*39, 39, 39 );
        [boton setFrame:botonFrame];
    
        //Hacemos una prueba, y mostramos por consola el titulo de l boton
        //NSLog(@"Has pulsado el %@", [boton titleForState:UIControlStateNormal]);
        
        //Añadimos dicho boton a la vista en la que estamos
        [self.view addSubview:boton];*/
        
        //////////////
}
}

Podemos utilizar el mismo código del método "pulsame" que hemos creado antes, para ver como efectivamente, el mismo método vale para todos los botones generados dinámicamente.

No hay comentarios:

Publicar un comentario