Calculadora de Propinas ( Tip Calculator )
La Aplicación que vamos a construir continuación calcula y muestra la propina de que deja en un restaurante de acuerdo al monto total.
La aplicación calculara el 10%, 15% y 20%. El usuario también podrá especificar un porcentaje modificado al mover el Slider ( Resbalador).
La aplicación usa varias características de object-oriented Objective-C incluyendo declaración de clases conocidas como interfaces in Objetive-C.
Vas a aprender también palabras claves básicas de Objective-C y sintaxis al momento de que escribas el código y este responda cuando el programa interactúe al momento de usar el GUI.
Revisión de la Tecnología usada en esta aplicación
En este siguiente capitulo introduciré algunas capacidades de Objective-C incluyendo objetos(Objects), clases(Classes), interfaces (Interfaces) y herencias(inheritance ).
El código de Objective-C requiere varios tipos de datos ( Data Type), Operadores (Operators), control de declaraciones( Control Statements) y palabras claves (Keywords). Tu vas a declarar variables (Variables) que correspondan al componente GUI. Tu vas a declarar e implementar métodos, vas usar mensajes para invocar los métodos de un objeto.
Para armar el evento vamos a necesitar agarrar y arrastrar las habilidades de Interface Interface Builder a la conexión de cada componente GUI y el método debe responder a las acciones de los eventos.
Construyendo la Aplicación.
1. Abrir Xcode
2. Seleccionar Window-based Aplicacion temple
3. Ir a carpeta Resource y dar doble click en el file MainWindow.xib, esto abrirá el programa Interface Builder.
4. Ahora agarrar y arrastrar un Text Field de la ventana library hacia la ventana Window.
5. Selecciona tu Text Field y ve a la ventana Inspector.
6. En la propiedad del texto la dejamos en 0.00
7. Quita el Check (Palomilla) de la caja Clear When Editing Begins
8. Ahora localiza la propiedad Keyboard debajo de Text Input Traits, esta propiedad muestra el Number Pad ya que lo único que necesitamos son dígitos
9. Luego agarramos y arrastramos un Label de la ventana de Library en la ventana de la aplicación, le damos doble click al label para cambiar el texto y ponen Total Bill ( Cuenta Total )
10. Pueden ajustar el tamaño del label de acuerdo a su gusto y podrán notar que habrán líneas cortadas al momento de mover el label esto les indicara la posición que esta ocupando el Babel
11. Agarramos y arrastramos 3 labels mas debajo de el Text Field con los nombres de 10%, 15% y 20%.
12. Seleccionar el primer Text Field que crearon y presionar Command+ D, esto duplicara el Text Field, creen 6 y colóquenlas debajo de los Labels: 10%, 15% y 20% como muestra el video
13. Seleccionar los nuevos Text Fields ir a la ventana Inspector bajar hasta la propiedad Control y quitar el Check de la opción Enabled. Le daremos Atributo de Text 0.00
14. Duplicar el primer Label 2 veces y colocar cada uno a lado de las dos filas un Label con el nombre de Tip y el otro Total.
15. Agarrar y arrastra un nuevo Label debajo del tercer label como esta mostrado en el video, luego cambiamos el atributo del label a 15%.
16. Ahora crearemos un Slider ( Delizante ) con el cual el usuario tendra la capacidad de cambiar el porcentaje de Tip(Propinas) que se otorgara, agarramos y arrastramos desde la Library ( El Slider sera la barrita con el circulo al centro), este lo ubicamos al lado izquierdo del Label 15%.
17. Seleccionamos el Slider y vamos a la ventana del Inspector y donde dice Minimum a 0.00, Maximum a 0.30 e Initial a 0.15
18. Ahora que el Slider esta configurado agregamos un nuevo label a la derecha de el Slider con la Propiedad “Custom”.
19. Para Completar nuestra aplicación necesitamos agregar 2 Labels y Text Fields debajo del Slider, Primero el Label con el atributo de Tip, luego creamos un Text Field junto a el , ahora un nuevo Text Field, Un nuevo Label con el atributo de Total y un Nuevo Label.
Estos son los paso para crear la Interface de la Aplicación. La aflicción esta creada pero ahora tenemos que darle funcionabilidad.
Para esto necesitaremos escribir cierto código en Xcode, es preferible que el codigo lo escriban ustedes en vez de cortar y pegar ya que de esa forma se ira familiarizando con el.
Dandole Funcionalidad a la aplicacion
-
Ahora regresamos a Xcode y vamos a File, New File , Aquí Estara remarcado Cocoa Touch Class, junto a ese estara un File llamado Objective-C , ese va a ser el que vamos a escoger ese y nos aseguramos que dejajo de el este en la subclass este como NSObject.
- Con esto se habran creado dos archivos en el Xcode/Resources los cuales tendran el nombre de Controller.h y Controller.m, pero los movemos a clases( CLasses)
- Abrimos el archivo Controller.h y escribimos el codigo que se encuentra adjuntado en el blog.
- Vamos a Interface Builder a la ventana Library y escogemos un objeto llamado Object. Este no es un Componente GUI por lo tanto no va a ir a la ventana de la aplicacion si no que va a ir a la ventana MainWindow.xib. ( Esta Mostrado en el video
- Seleccionamos el nuevo objeto creado en la ventana y abrimos la ventana Inspector para cambiar la clase de NSObject a Controller.
- Despues cambiamos a Connections Tab, aqui veran los Outels y las accion.
- Van a conectar los Outlets con sus respectivos objeto como esta mostrado en el video
- Selecionamos ahora el Text Field en la parte superior de la aplicacion y vamos a Atribute Window y damos click en el el Connection Tab, aqui vamos a la opcion de events( Eventos es lo que vamos a usar para decirle a la aplicacion que hacer cuando el usuario seleccione el Text Field) vas a seleccionar el evento Editing Changed y desde el circulo arrastramos hasta el MainWindow Object( Mostrado en el video) dice Controller en el MainWindow.xib
- Ahora vamos a colocar el segundo pedazo de codigo en el archivo Controller.m en la carpeta Classesc de Xcode
// Fig. #.#: Controller.h
// Controller class for the Tip Calculator app.
// Methods defined in Controller.m.
#import
@interface Controller : NSObject
{
// outlets
IBOutlet UITextField *billField;
IBOutlet UITextField *tipFieldTen;
IBOutlet UITextField *tipFieldFifteen;
IBOutlet UITextField *tipFieldTwenty;
IBOutlet UITextField *tipFieldCustom;
IBOutlet UITextField *totalFieldTen;
IBOutlet UITextField *totalFieldFifteen;
IBOutlet UITextField *totalFieldTwenty;
IBOutlet UITextField *totalFieldCustom;
IBOutlet UILabel *customPercentLabel;
IBOutlet UISlider *customPercentSlider;
NSString *billTotal; // string for the "Bill Total" field
} // end instance variable declarations
- (IBAction)calculateTip:(id)sender; // calculates the tips
@end
Codigo de la clase Controller.m
// Controller.m
// Controller class for the tip calculator app.
#import "Controller.h"
@implementation Controller // begin implementation of Controller
// called after all the GUI elements have been loaded
- (void)awakeFromNib
{
[billField becomeFirstResponder]; // display keyboard for billField
} // end method awakeFromNib
// called when the user touches a key or button
- (IBAction)calculateTip:(id)sender
{
static BOOL toggle = YES; // was this method trigger by the user?
// the user touched the keypad or moved the Slider
if (toggle)
{
toggle = NO; // this method will next be called programmatically
// retrieve the string in billField
NSString *billFieldText = billField.text;
// convert billFieldText to a float
float newTotal = [billFieldText floatValue];
// retrieve the slider value (between 0 and 0.3)
float customTipPercent = customPercentSlider.value;
// determine if billField generated the event
if (sender == billField)
{
// delete key pressed
if (billFieldText.length < billTotal.length)
billTotal = [NSString stringWithFormat:@"%.02f",
newTotal / 10];
else // new digit entered
billTotal = [NSString stringWithFormat:@"%.02f",
newTotal * 10];
// update billField with the properly formatted number
billField.text = billTotal;
// update newTotal with the new value
newTotal = [billTotal floatValue];
// calculate the tips for 10, 15 and 20%
float tenTip = newTotal * 0.10;
float fifteenTip = newTotal * 0.15;
float twentyTip = newTotal * 0.20;
// set the values for the "Tip" fields
tipFieldTen.text = [NSString stringWithFormat:@"%.02f", tenTip];
tipFieldFifteen.text =
[NSString stringWithFormat:@"%.02f", fifteenTip];
tipFieldTwenty.text =
[NSString stringWithFormat:@"%.02f", twentyTip];
// set the values for the "Total" fields
totalFieldTen.text =
[NSString stringWithFormat:@"%.02f", newTotal + tenTip];
totalFieldFifteen.text =
[NSString stringWithFormat:@"%.02f", newTotal + fifteenTip];
totalFieldTwenty.text =
[NSString stringWithFormat:@"%.02f", newTotal + twentyTip];
} // end if
// determine if customPercentSlider generated the event
else if (sender == customPercentSlider)
{
// the "Custom" slider was moved
// round the value to a whole number
int percentage = (int)(customTipPercent * 100);
// update the label with the new percentage followed by %
customPercentLabel.text =
[NSString stringWithFormat:@"%i%%", percentage];
// convert percentage back to float and assign to Slider's value
float newSliderValue = ((float) percentage) / 100;
customPercentSlider.value = newSliderValue;
// slider Thumb moved; update customTipPercent
customTipPercent = newSliderValue;
} // end else
// calculate customTip
float customTip = customTipPercent * newTotal;
// update tipFieldCustom with the new custom tip value
tipFieldCustom.text = [NSString stringWithFormat:@"%.02f",
customTip];
// update totalFieldCustom
totalFieldCustom.text =
[NSString stringWithFormat:@"%.02f", customTip + newTotal];
} // end if
else // the method was called programmatically
{
toggle = YES; // the method will next be called by user interaction
}
} // end method calculateTip:
@end // Controller's implementation
10 comments:
Hola Richard !
Mi nombre es Fran y la verdad es que me gusta mucho como explicas las cosa, estuve haciendo la aplicación de la calculadora pero todavi no me funciona, no se si habre hecho algo mal o que pero lo voy a volver intentar. Me gustaria saber si tengo algunas dudas, puedo contactar contigo?. Desde ya muchas gracias y sigo con tus ejercicios.
Te dejo mi mail por si me quieres contestar, un saludo.
Perdon es tarde y estoy medio dormido, aca va mi mail.
fleitemberger@gmail.com
Un saludo.
Hola, oye me dice que el segundo video es privado y no puedo verlo
Lo Siento por las personas que quiesieron ver la segunda parte del video por error lo puse para privado pero ahora lo pueden ver todos espero que lo disfruten
Richard
tengo problemas con el tip calculator, no puedo linkear el evento "editing changed" al objeto controller, creo que hice algo mal.
Intentare de nuevo...
Bueno algo q te puedo remendar es que "Selecciones el Text Field, luego ve al inspector y en el Tab de Connection vas a usar el metodo, Editing Changed, lo arrastras hasta el Objecto que deberia llamarse Controller, y te saldra un ovalo junto al Objeto con el nombre de calculateTip. y eso te dara la conexion.
Espero q te sirva
Hola Richard.. Estoy pensando en lanzar una aplicación muy sencilla pero que creo que podría ser muy comercial. Yo me ocuparía de la parte del diseño y tú de programación (creo que es algo bastante simple para alguien con conocimientos como tú)... Espero tu respuesta a hastaquehagaclick (arroba) hotmail (punto) com
Saludos desde España ;)
Muy buen tutorial ... pero ya hacen falta mas bro ... cuando las subes?
Hola,
Hice este ejemplo pero no me salio, lo segui al pie de la letra 3 veces y en todas me da el mismo error,
me dice que los campos estan undeclared, por ejemplo
tipFieldTen undeclared
Me puede decir si hay algun paso que hice mal?
gracias
joder como te lo has currado....
Publicar un comentario