Guion del blog de curso de Objetive-C para IOS – DIA 6
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.
————-
Creamos un nuevo proyecto con la plantilla single-view, y nuevamente dejamos desmarcadas las 3 opciones.
Lo primero será crear el interface gráfico tal como se ve aquí:
A continuación creamos todos los Outlets y Actions, con el tipico truco de pulsar «control» y arrastrar el control a mi archivo ViewController.h Debería quedar algo asi:
Archivo ViewController.h:
———————————–
//
// ViewController.h
// Diario006
//
// Created by david fraj blesa on 12/06/12.
// Copyright (c) 2012 __MyCompanyName__. All rights reserved.
//
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController{
NSString *texto;
}
//Primero las propiedades
@property (retain, nonatomic) IBOutlet UITextField *txtOrigen;
@property (retain, nonatomic) IBOutlet UITextField *txtDestino;
@property (retain, nonatomic) IBOutlet UIButton *btn1;
@property (retain, nonatomic) IBOutlet UIButton *btn2;
@property (retain, nonatomic) IBOutlet UIButton *btn3;
@property (retain, nonatomic) IBOutlet UIButton *btn4;
//Ahora los diferentes metodos
– (IBAction)btn1_TouchUpInside:(id)sender;
– (IBAction)btn2_TouchUpInside:(id)sender;
– (IBAction)btn3_TouchUpInside:(id)sender;
– (IBAction)btn4_TouchUpInside:(id)sender;
@end
———————-
En el siguiente archivo, esta la implementación de los 4 métodos que hemos creado. Cada botón responde a uno de los métodos, haciendo diferentes funciones. Fijaos en el código mas abajo para poder ver que hacen cada uno.
El primero, es un repaso a los diferentes métodos, que tiene el objeto NSString
El Segundo es un ejemplo, de como usar esos métodos, para averiguar la letra correspondiente a un DNI
El Tercero es un ejemplo de como implementar el algoritmo de cifrado CESAR
El cuarto se queda sin implementar de momento
Archivo ViewController.m:
———————————–
//
// ViewController.m
// Diario006
//
// Created by david fraj blesa on 12/06/12.
// Copyright (c) 2012 __MyCompanyName__. All rights reserved.
//
#import «ViewController.h»
@implementation ViewController
@synthesize txtOrigen;
@synthesize txtDestino;
@synthesize btn1;
@synthesize btn2;
@synthesize btn3;
@synthesize btn4;
– (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Release any cached data, images, etc that aren’t in use.
}
#pragma mark – View lifecycle
– (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
– (void)viewDidUnload
{
[self setTxtOrigen:nil];
[self setTxtDestino:nil];
[self setBtn1:nil];
[self setBtn2:nil];
[self setBtn3:nil];
[self setBtn4:nil];
[super viewDidUnload];
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}
– (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
}
– (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
}
– (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
}
– (void)viewDidDisappear:(BOOL)animated
{
[super viewDidDisappear:animated];
}
– (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
// Return YES for supported orientations
return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}
– (void)dealloc {
[txtOrigen release];
[txtDestino release];
[btn1 release];
[btn2 release];
[btn3 release];
[btn4 release];
[super dealloc];
}
– (IBAction)btn1_TouchUpInside:(id)sender {
//Asignamos el texto que hemos escrito, a nuestra variable «texto»
texto=txtOrigen.text;
//Vamos a jugar con el NSString
//nota: Si no ponemos delante texto=
//no hara nada, porque no asigna nada
//Buscamos la palabra «hola», y la sustituimos por la palabra «adios»
[texto stringByReplacingOccurrencesOfString:@»hola» withString:@»adios»];
//Longitud de la cadena de texto
[NSString stringWithFormat:@»%i»,[texto length]];
//Cadena de texto en mayusculas
[texto uppercaseString];
//Cadena de texto en minusculas
[texto lowercaseString];
//Accedemos al primer caracter:
[texto substringWithRange:NSMakeRange(0,1)];
//Sustituimos el primer caracter por una x
[texto stringByReplacingCharactersInRange:NSMakeRange(0, 1) withString:@»x»];
//Vamos a hacer un bucle para sustituir todas las letras «a» en minusculas, por «A» mayusculas
//Creamos una variable para almacenar el caracter actual
NSString *caracter;
//Creamos un bucle que recorrera desde el caracter numero 0, hasta el ultimo caracter, ultilizando el metodo length del objeto NSString
for(int i=0;i<[texto length]-1;i++){
//Extraemos el caracter actual
caracter=[texto substringWithRange:NSMakeRange(i,1)];
//Si el caracter es una «a», la sustituimos por «A» mayuscula
if([caracter isEqualToString:@»a»]){
texto=[texto stringByReplacingCharactersInRange:NSMakeRange(i, 1) withString:@»A»];
}
}
//Fin del bucle
//Volcamos el texto al destino
txtDestino.text=texto;
}
– (IBAction)btn2_TouchUpInside:(id)sender {
//Esto es el uso del algoritmo necesario para calcular la letra del dni
//Creamos una primera variable con todas las letras
NSString *letras=@»TRWAGMYFPDXBNJZSQVHLCKE»;
//Recogemos el numero que habra en el texto original
int numero=[txtOrigen.text integerValue];
//Saco informacion del numero
NSLog(@»%i», numero);
//Vamos a calcular la posicion del vector donde esta la letra
//Para esto creamos una nueva variable
int posicion=0;
//Se hace la operacion modulo 23, del numero de carnet de DNI, y asi sabemos la posicion del
//vector de letras, que corresponde a ese dni
posicion=numero%23;
//Saco informacion de la posicion
NSLog(@»%i», posicion);
//escribo en el cuadro de texto de destino, la letra.
txtDestino.text=[NSString stringWithFormat:@»La letra es %@», [letras substringWithRange:NSMakeRange(posicion,1)]];
}
– (IBAction)btn3_TouchUpInside:(id)sender {
//Vamos a implementar el algoritmo CESAR
//Empezamos creando lo que seria el vector de letras
NSMutableArray *letrasOriginales=[[NSMutableArray alloc] initWithObjects:@»a», @»b», @»c», @»d», @»e», @»f», @»g», @»h» ,@»i», @»j», @»k», @»l», @»m», @»n», @»ñ», @»o», @»p», @»q», @»r», @»s», @»t», @»u», @»v», @»w», @»x», @»y», @»z», nil];
NSMutableArray *letrasCifradas=[[NSMutableArray alloc] initWithObjects:@»a», @»b», @»c», @»d», @»e», @»f», @»g», @»h» ,@»i», @»j», @»k», @»l», @»m», @»n», @»ñ», @»o», @»p», @»q», @»r», @»s», @»t», @»u», @»v», @»w», @»x», @»y», @»z», nil];
//Empezamos con una clave por defecto de 3 (Asi es como cesar cifraba sus mensajes)
int clave=6;
//Vamos a rehacer el vector de letras Cifradas, usando la clave que hemos puesto
//Bucle para eso
int posicion;
for(int i=0;i<[letrasOriginales count];i++){
//Calculamos la posicion adecuada a sustituir, segun la clave
posicion=(i+clave)%27;
[letrasCifradas replaceObjectAtIndex:i withObject:[letrasOriginales objectAtIndex:posicion]];
}
//Mostramos el nuevo vector
for(int i=0; i<[letrasCifradas count];i++){
NSLog(@»%@ corresponde a %@», [letrasOriginales objectAtIndex:i], [letrasCifradas objectAtIndex:i]);
}
//Vamos a cifrar ahora con el nuevo vector creado.
//Lo que haremos para no tener problemas, es que el vector cifrado estara en mayusculas, y el vector original en minusculas. Asi no tendremos ningun problema.
//Hacemos un bucle para pasar todas las letras a mayusculas:
for(int i=0; i<[letrasCifradas count];i++){
[letrasCifradas replaceObjectAtIndex:i withObject:[[letrasCifradas objectAtIndex:i] uppercaseString]];
}
//jur jur jur: madre mia con la sintaxis en objetive-c!!!
//Ahora vamos a cifrar el texto
//Volcamos el texto original a la variable «texto»
texto=txtOrigen.text;
//Hacemos un bucle, para recorrer letra por letra el texto original
for(int i=0; i<[texto length]-1;i++){
//cada vez que estemos en una letra, hay que sustituirla por su correspondiente en el vector de letras. Asi que lo voy a hacer a las bravas, y recorrere con un bucle cada vector:
for(int j=0;j<[letrasOriginales count];j++){
if([[texto substringWithRange:NSMakeRange(i,1)] isEqualToString:[letrasOriginales objectAtIndex:j]]){
texto=[texto stringByReplacingCharactersInRange:NSMakeRange(i, 1) withString:[letrasCifradas objectAtIndex:j]];
}
}
}
//Por ultimo volcamos el texto, en el txtDestino
txtDestino.text=texto;
}
– (IBAction)btn4_TouchUpInside:(id)sender {
//Este metodo queda de momento pendiente
}
@end