¿Cuántos programadores de usar, también construir mi propia biblioteca de funciones listos para ser reutilizados en múltiples proyectos y múltiples contextos. Vamos a cambiar el título de este post, tal vez un poco arriesgado ", pero, sin embargo, como veremos, no lejos de la realidad.
En Objective-C se puede escribir y llamar a C / C + +, incluyendo el montaje, para el caso. Esta característica lo convierte en un lenguaje muy versátil y, en algunos aspectos, fenomenal. Por un lado, se puede utilizar y apreciar la sintaxis puramente de Objective-C, en el que usted puede correr más rápido el código portar escrito en ANSI C (quizás por Digital Unix o Sun) y puede encajar cómodamente en nuestro iPhone o iPad aplicaciones; por no hablar de todos los kernel BSD ya está disponible en Mac OS X!
Continuación ...
Como se ha mencionado iPhone FirstApp: Adivinar el número - Parte 1 podemos ver cómo hacer una aplicación para el iPhone de Apple sin necesidad de utilizar Interface Builder! De hecho, vamos a eliminar los archivos físicos creados por Interface Builder, Xcode asistente. Al final de este post, entonces, tenemos una aplicación idéntica en todos los aspectos, a la conseguida en la primera parte, con la diferencia que vamos a lograr todos nuestros componentes visuales, incluyendo la ventana principal, por completo con el código.
La aplicación ya está hecho, si lo que desea es descargar, está disponible en mi repositorio de Google Code:
Me gustaría señalar de inmediato que el ZIP de este ejemplo que pesan menos que la última vez! 
Creamos el proyecto
Comenzamos por crear nuestro proyecto SecondApp (para distinguirla de FirstApp), aunque esta vez elija Ventana de aplicaciones basado en:

Ahora vamos a borrar todo lo relacionado con Interface Builder. : eliminatelo anche dal file system, quindi selezionate Also Move to Trash . Elimine el archivo MainWindow.xib , que se encuentra en la carpeta de Resources : también se elimina del sistema de archivos, a continuación, seleccione también se mueven a la papelera. nella casella Main nib file base name : A continuación, seleccione el archivo SecondoApp-info.plist y eliminar la referencia a la MainWindow punta de caja principal nombre base del archivo:

En este punto, ya no tienen Windows, por lo menos a través de Interface Builder. , e modifichiamo la funzione main() in questo modo: Por lo tanto, abrir el archivo main.m , situado en Other Sources , y modificar la función main() así:
1 2 3 4 5 6 7 8 9 10 11
| int argc, char * argv [ ] ) { int main (int argc, char * argv []) { pool = [ [ NSAutoreleasePool alloc ] init ] ; NSAutoreleasePool * Piscina = [[ NSAutoreleasePool alloc] init]; / / Al eliminar el archivo. XIB hemos perdido el punto / / Delegado a la Asamblea Parlamentaria Paritaria, a continuación, pasar a la "mano" UIApplicationMain ( argc, argv, nil , @ "SecondAppAppDelegate" ) ; int retval = UIApplicationMain (argc, argv, nil, @ "SecondAppAppDelegate"); ; [Comunicado de piscina]; volver retval; } |
Abrir SecondAppAppDelegate.me a continuación, crear la ventana principal en el código:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| void ) applicationDidFinishLaunching : ( UIApplication * ) application { - (Void) applicationDidFinishLaunching: (UIApplication *) {aplicación
/ / Obtener el tamaño de la pantalla (320, 480) UIScreen mainScreen ] applicationFrame ] ; CGRect windowRect = [[Principal UIScreen] applicationFrame]; / / Se crea una ventana - como lo hemos hecho en Interface Builder bye bye [ [ UIWindow alloc ] initWithFrame : windowRect ] ; MainWindow UIWindow * = [[UIWindow alloc] initWithFrame: windowRect]; / / Establecer el fondo de la ventana de color amarillo, para diferenciar / / El FirstApp solicitud anterior [ UIColor yellowColor ] ] ; [SetBackgroundColor MainWindow: [UIColor yellowColor]];
mainWindow ] ; [Self SetWindow: MainWindow]; ; [Ventana makeKeyAndVisible];
; [MainWindow liberación]; } |
Ya se puede probar la aplicación, si usted consigue una ventana amarilla que lo hizo todo bien!
, necessario solo se si usa Interface Builder. En el archivo de SecondAppAppDelegate.h podemos eliminar IBOutlet , sólo es necesario si se utiliza Interface Builder. También añadir que nuestras variables globales, la última vez que había entrado en el controlador. A continuación, modificar el archivo SecondAppAppDelegate.h :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| # Importar <UIKit/UIKit.h> NSObject <UIApplicationDelegate> { @ Interface SecondAppAppDelegate: NSObject {<UIApplicationDelegate> UIWindow * ventana; UITextField * número; UIButton botón *; numeroACaso int; } nonatomic, retain ) UIWindow * window; @ Propiedad (no atómica, retener) UIWindow ventana *; void ) controllaNumero; - (Void) obtenerNumero; @ End |
, in quanto non stiamo usando Interface Builder. Una vez más, hemos preparado la definición del método controllaNumero , como la última vez, pero hemos eliminado la indicación IBAction , porque no se está utilizando Interface Builder.
Creamos la interfaz de código
Es el momento de crear código con todos los componentes de nuestra interfaz. ed inseriamo il seguente codice: Volvamos al archivo SecondAppAppDelegate.m , posizioniamoci antes [mainWindow release] e introduzca el siguiente código:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| / / Creamos 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 el número"]; navigationItem animated : NO ] ; [MyNavigationBar pushNavigationItem: navigationItem animados: NO]; myNavigationBar ] ; [Ventana addSubview: myNavigationBar];
/ / Crear la etiqueta [ [ UILabel alloc ] initWithFrame : CGRectMake ( 10 , 50 , 300 , 80 ) ] ; UILabel myLabel * = [[UILabel alloc] initWithFrame: CGRectMake (10, 50, 300, 80)]; UIColor clearColor ] ; myLabel.backgroundColor = [UIColor clearColor]; ; myLabel.numberOfLines = 2; "iPhone ha pensato un numero da 1 a 10, prova ad indovinarlo?" ; myLabel.text = @ "El iPhone ha diseñado un número del 1 al 10, trata de adivinar?" myLabel ] ; [Ventana addSubview: myLabel];
/ / Crear entrada de texto UITextField alloc ] 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; "Inserisci il numero" ; numero.placeholder = @ "Introduzca el número"; numero ] ; [Ventana addSubview: número];
/ / Crear el botón UIButton buttonWithType : UIButtonTypeRoundedRect ] ; botón = [UIButton buttonWithType: UIButtonTypeRoundedRect]; 10 , 180 , 300 , 30 ) ; bottone.frame CGRectMake = (10, 180, 300, 30); @ "Premi qui" forState : UIControlStateNormal ] ; [Botón setTitle: @ "Click Aquí" Forst: UIControlStateNormal]; self action : @selector ( controllaNumero ) forControlEvents : UIControlEventTouchUpInside ] ; El botón [AddTarget: acción de auto: @ selector (obtenerNumero) forControlEvents: UIControlEventTouchUpInside]; bottone ] ; [Ventana addSubview: botón];
; [MyLabel liberación]; ; [NavigationItem liberación]; ; [MyNavigationBar liberación]; |
della scorsa volta, subito dopo il [mainWindow release]; inseriamo: Desde el ' applicationDidFinishLaunching corresponde a viewDidLoad que la última vez, justo después de la [mainWindow release]; insertar:
1
| + arc4random ( ) % 10 ; numeroACaso arc4random = 1 + () 10%; |
Ahora que podemos hacer es implementar el método controllaNumero , que será idéntico (aparte del prototipo) para que el tiempo utilizado por última vez:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| void ) controllaNumero { - (Void) {obtenerNumero "Premuto bottone di controlla numero" ) ; NSLog (@ "número presionado el botón de control"); [ numero.text integerValue ] ; numeroInserito = int [numero.text integerValue]; message; NSString * mensaje; "Il numero inserito è %d" , numeroInserito ) ; NSLog (@ "El número introducido es% d", numeroInserito); numeroInserito <numeroACaso ) { if (numeroInserito <numeroACaso) { "Troppo basso..." ; message = @ "demasiado baja ..."; ( numeroInserito> numeroACaso ) { } Else if (numeroInserito> numeroACaso) { "Troppo alto..." ; message = @ "demasiado alto ..."; ( numeroInserito == numeroACaso ) { } Else if (numeroInserito numeroACaso ==) { "Bravo hai indovinato" ; message = @ "Bravo, lo habéis adivinado"; + arc4random ( ) % 10 ; numeroACaso arc4random = 1 + () 10%; "Numero pensato %d" , numeroACaso ) ; NSLog (@ "% d Número de pensamiento," numeroACaso); } [ [ UIAlertView alloc ] UIAlertView alertMessaggio * = [[UIAlertView alloc] "Responso" initWithTitle: @ "Respuesta" mensaje: mensaje delegado: nil "OK" cancelButtonTitle: @ "OK" ] ; otherButtonTitles: nil]; ; [AlertMessaggio show]; ; [AlertMessaggio liberación]; "" ; numero.text @ = ""; } |
Ya hemos terminado!
Conclusiones y consideraciones
, proprio perchè volevo lasciarlo il più semplice e snello possibile e, anche, per dimostrare che non sono elementi sempre necessari. Este ejemplo no hacer uso directo de un UIView o UIViewController , sólo porque me quería ir lo más simple y ágil como sea posible y, también, para mostrar que los elementos no siempre son necesarias. Sin embargo insertar objetos directamente en la ventana puede tener algún sentido en este ejemplo y otros contextos esporádicos. portano comunque benefici in tantissimi altri casi, ein alcuni sono praticamente indispensabili; come avremo modo di vedere in futuro. El uso de UIView y UIViewController traer beneficios en muchos otros casos, sin embargo, algunos son ein prácticamente indispensable, como veremos en el futuro.
Continuación ...
La primera fuente que me levanté en mis manos ha sido escrito en básico y consistía en unas pocas líneas de código, para aclararme. Era un juego simple que genera un número aleatorio de 1 a 10 y, a través del teclado, compruebe que el número introducido se Maggioni, menor o igual al número aleatorio. A pesar de su simplicidad en bruto sigue siendo, para mí, uno de los mejores ejemplos - simple, divertida y práctica - para explicar a aquellos que no saben nada acerca de la programación lo que se entiende realmente por "programa de ordenador". Así que me decidí a proponer para el iPhone de Apple, tal vez ayude a alguien ...
Continuación ...
La clase UIAletrView le permite mostrar una ventana modal (animación) para informar y / o que se haga algo. El UIAlterView (ver alertas) son muy cómodas y fáciles de usar. La gestión de la respuesta del usuario se resuelve mediante la interceptación de que el índice del botón pulsado. Para ver un simple UIAlterView acaba de escribir:
1 2 3 4
| / / Alerta con un simple botón, sin devolución de llamada [ [ UIAlertView alloc ] initWithTitle : @ "Titolo" message : @ "Messaggio" cancelButtonTitle : @ "Annulla" otherButtonTitles : nil ] ; UIAlertView MyAlert * = [[UIAlertView alloc] initWithTitle: @ "Título" mensaje: @ "Mensaje" cancelButtonTitle: @ "Cancelar" otherButtonTitles: nil]; ; [MyAlert show]; ; [MyAlert liberación]; |
Y 'posible para añadir botones adicionales otherButtonTitles :
1 2 3 4
| / / Alerta con dos simples botones, sin devolución de llamada [ [ UIAlertView UIAlertView MyAlert * = [[UIAlertView ; [MyAlert show]; ; [MyAlert liberación]; |
: Para determinar qué botón se ha pulsado, simplemente agregue el delegate:self inicialización de objetos UIAlterView :
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| / / Alert sencillo con dos botones y callbacks [ [ UIAlertView alloc ] initWithTitle : @ "Titolo" message : @ "Messaggio" delegate : self cancelButtonTitle : @ "Annulla" otherButtonTitles : @ "Ok" , nil ] ; UIAlertView MyAlert * = [[UIAlertView alloc] initWithTitle: @ "Título" mensaje: @ "Mensaje" delegado: cancelButtonTitle auto: @ "Cancelar" otherButtonTitles: @ "OK", nil]; ; [MyAlert show]; ; [MyAlert liberación];
/ / La llamada se ve así
void ) alertView : ( UIAlertView * ) alertView clickedButtonAtIndex : ( NSInteger ) buttonIndex { - (Void) alertView: (UIAlertView *) clickedButtonAtIndex alertView: (NSInteger) {buttonIndex buttonIndex ) { switch (buttonIndex) { : caso 1: / / Código break; } } |
La devolución de llamada alertView necesidad de contar con ese nombre, para obtener más información, consulte UIAlertViewDelegate
punteranno sempre a quella. Con sólo el callbck alertView:clickedButtonAtIndex más UIAletrView siempre apuntará a eso. Usando la etiqueta del campo UIAletrView , podemos determinar cuál es el "llamador":
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| / / Alert sencillo con dos botones y callbacks [ [ UIAlertView alloc ] initWithTitle : @ "Titolo" message : @ "Messaggio" delegate : self cancelButtonTitle : @ "Annulla" otherButtonTitles : @ "Ok" , nil ] ; UIAlertView MyAlert * = [[UIAlertView alloc] initWithTitle: @ "Título" mensaje: @ "Mensaje" delegado: cancelButtonTitle auto: @ "Cancelar" otherButtonTitles: @ "OK", nil]; ; myAlertA.tag = 1; ; [MyAlert show]; ; [MyAlert liberación];
/ / [ [ UIAlertView alloc ] initWithTitle : @ "Titolo" message : @ "Messaggio" delegate : self cancelButtonTitle : @ "Annulla" otherButtonTitles : @ "Ok" , nil ] ; UIAlertView myAlertB * = [[UIAlertView alloc] initWithTitle: @ "Título" mensaje: @ "Mensaje" delegado: cancelButtonTitle auto: @ "Cancelar" otherButtonTitles: @ "OK", nil]; ; myAlertA.tag = 2; ; [MyAlertB show]; ; [MyAlertB liberación];
/ / Múltiples gestión UIAlertView
void ) alertView : ( UIAlertView * ) alertView clickedButtonAtIndex : ( NSInteger ) buttonIndex { - (Void) alertView: (UIAlertView *) clickedButtonAtIndex alertView: (NSInteger) {buttonIndex "Alert Tag: %i" , alertView.tag ) ; NSLog (@ "Etiquetas de alerta:% i", alertView.tag); "buttonIndex: %i" , buttonIndex ) ; NSLog (@ "buttonIndex:% i", buttonIndex); } |
Continuación ...
La sintaxis con corchetes en Objective-C es una de las razones más frustración para los que vienen de otros idiomas (por objetos). Sin embargo, acostumbrarse a él, te das cuenta de cómo leer el código se vuelve demasiado con esta mezcla de clásico y más claramente Smalltalk sintaxis. Por ejemplo, podemos ver cómo el mismo procedimiento se puede escribir tanto en la sintaxis. Tome la inicialización de un UIAlertView :
1 2 3 4 5 6 7 8
| [ [ UIAlertView alloc ] initWithTitle : @ "Titolo" UIAlertView MyAlert * = [[UIAlertView alloc] initWithTitle: @ "Título" "Messaggio" mensaje: @ "Mensaje" delegado: sí "Annulla" cancelButtonTitle: @ "Cancelar" "Ok" , nil ] ; otherButtonTitles: @ "OK", nil]; ; myAlert.tag = 1; ; [MyAlert show]; ; [MyAlert liberación]; |
El ajuste de la potavamo etiqueta que aún así:
1 2 3 4 5 6 7 8
| [ [ UIAlertView alloc ] initWithTitle : @ "Titolo" UIAlertView MyAlert * = [[UIAlertView alloc] initWithTitle: @ "Título" "Messaggio" mensaje: @ "Mensaje" delegado: sí "Annulla" cancelButtonTitle: @ "Cancelar" "Ok" , nil ] ; otherButtonTitles: @ "OK", nil]; 1 ] ; [MyAlert de configuración: 1]; ; [MyAlert show]; ; [MyAlert liberación]; |
Lo mismo en la lectura durante el evento:
1 2 3 4 5
| void ) alertView : ( UIAlertView * ) alertView clickedButtonAtIndex : ( NSInteger ) buttonIndex { - (Void) alertView: (UIAlertView *) clickedButtonAtIndex alertView: (NSInteger) {buttonIndex alertView.tag == 1 ) { // ... if (alertView.tag == 1) {/ / ... / / O alertView tag ] == 1 ) { // ... if ([alertView tag] == 1) {/ / ... } |
Nota: No todas las propiedades o los métodos que esta sintaxis dual. En el caso de ' UIAlertView tenemos esta doble funcionalidad. Para otros objetos, o en otros casos, sin embargo, sólo uno de los dos podría funcionar ... pero no preguntes por qué (en función de cómo los desarrolladores han definido la interfaz).
Continuación ...
Todos los objetos que se derivan de <a target="_blank" href="http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UIView_Class/UIView/UIView.html#//apple_ref/occ/cl/UIView">UIView</a> heredan las propiedades útiles <a target="_blank" href="http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UIView_Class/UIView/UIView.html#//apple_ref/doc/uid/TP40006816-CH3-SW25">tag</a> Esta propiedad es un usuario real de datos (un "lugar" que el desarrollador utiliza para fines generales) del tipo <a target="_blank" href="http://developer.apple.com/iphone/library/documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_DataTypes/Reference/reference.html#//apple_ref/doc/c_ref/NSInteger">NSInteger</a> Entonces, ¿dónde podemos guardar sólo los números.
Los usos a los que, obviamente, puede depende de las circunstancias sin embargo, es útil para identificar un objeto en particular para tomar una ocurrencia común. Por ejemplo, imagine que tiene dos <a target="_blank" href="http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UIAlertView_Class/UIAlertView/UIAlertView.html">UIAlertView</a> responder al mismo evento:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| / / Primero de alerta [ [ UIAlertView alloc ] initWithTitle : @ "Primo" message : @ "Primo Alert" delegate : self cancelButtonTitle : @ "OK" otherButtonTitles : nil , nil ] ; UIAlertView alerta * = [[UIAlertView alloc] initWithTitle: @ "Primera" mensaje: @ "First Alert" delegado: cancelButtonTitle auto: @ "OK" otherButtonTitles: nil, nil]; ; [Alerta show]; ; [Comunicado de alerta];
/ / ...
/ / Alert Segunda [ [ UIAlertView alloc ] initWithTitle : @ "Secondo" message : @ "Secondo Alert" delegate : self cancelButtonTitle : @ "OK" otherButtonTitles : nil , nil ] ; UIAlertView alerta * = [[UIAlertView alloc] initWithTitle: @ "segundo" mensaje: @ "segunda alerta" delegado: cancelButtonTitle auto: @ "OK" otherButtonTitles: nil, nil]; ; [Alerta show]; ; [Comunicado de alerta];
/ / Evento / / Cliccandi botón Aceptar de esta función será llamada de Alter void ) alertView : ( UIAlertView * ) alertView clickedButtonAtIndex : ( NSInteger ) buttonIndex { - (Void) alertView: (UIAlertView *) clickedButtonAtIndex alertView: (NSInteger) {buttonIndex / / Todo } |
Nota: ejemplos de código en C + + se encuentran las direcciones. Esto no es del todo correcto, ya que, como usted sabe, el lenguaje es Objective-C. Esto se debe al hecho de que los plugins que utilizo para ver el código fuente no es compatible con Objective-C y C + + es el que mejor se acerca a él.
¿Cómo diferenciar entre la alerta dos? Precisamente con la etiqueta de propiedad. Después de crear la alert simplemente escriba:
1 2 3 4 5 6 7 8 9 10 11 12 13
| / / Primero de alerta [ [ UIAlertView alloc ] initWithTitle : @ "Primo" message : @ "Primo Alert" delegate : self cancelButtonTitle : @ "OK" otherButtonTitles : nil , nil ] ; UIAlertView alerta * = [[UIAlertView alloc] initWithTitle: @ "Primera" mensaje: @ "First Alert" delegado: cancelButtonTitle auto: @ "OK" otherButtonTitles: nil, nil]; 1 ] ; // imposto il tag di questo Alert ad 1 [Ajuste de alerta: 1] / / establecer la etiqueta de esta Alerta en un ; [Alerta show]; ; [Comunicado de alerta];
/ / ...
/ / Alert Segunda [ [ UIAlertView alloc ] initWithTitle : @ "Secondo" message : @ "Secondo Alert" delegate : self cancelButtonTitle : @ "OK" otherButtonTitles : nil , nil ] ; UIAlertView alerta * = [[UIAlertView alloc] initWithTitle: @ "segundo" mensaje: @ "segunda alerta" delegado: cancelButtonTitle auto: @ "OK" otherButtonTitles: nil, nil]; 2 ] ; // imposto il tag di questo Alert ad 2 [Ajuste de alerta: 2] / / establecer la etiqueta de esta Alerta a 2 ; [Alerta show]; ; [Comunicado de alerta]; |
Ahora modifique el evento con el fin de entender que una alerta se ha cerrado:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| / / Evento / / Cliccandi botón Aceptar de esta función será llamada de Alter void ) alertView : ( UIAlertView * ) alertView clickedButtonAtIndex : ( NSInteger ) buttonIndex { - (Void) alertView: (UIAlertView *) clickedButtonAtIndex alertView: (NSInteger) {buttonIndex alertView.tag ) { switch (alertView.tag) { : caso 1: / / First Alert break; : caso 2: / / Según alerta break; por defecto: break; } } |
Misma técnica se puede utilizar si tenemos una serie de <a target="_blank" href="http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UIButton_Class/UIButton/UIButton.html">UIButton</a> tiempo de ejecución. Por ejemplo:
1 2 3 4 5 6 7 8 9 10
| unsigned int i = 0 ; i < 10 ; i ++ ) { for (unsigned int i = 0; i <10; i + +) { [ [ UIButton buttonWithType : UIButtonTypeCustom ] initWithFrame : CGRectMake ( i * 20 , i * 20 , 20 , 20 ) ] ; UIButton * myButton = [[UIButton buttonWithType: UIButtonTypeCustom] initWithFrame: CGRectMake (i * 20, * 20, 20, 20)]; @ "But" forState : UIControlStateNormal ] ; [MyButton setTitle: @ "Pero", Forst: UIControlStateNormal]; i ] ; // imposto il tag [AJUSTE MyButton: i]; / / establecer la etiqueta
/ / El mismo evento para todos los self action : @selector ( onTouchUpInside : ) forControlEvents : UIControlEventTouchUpInside ] ; [AddTarget MyButton: acción de auto: @ selector (onTouchUpInside:) forControlEvents: UIControlEventTouchUpInside];
mybutton ] ; [Self.view addSubview: myButton]; } |
(dove eseguiamo un casting <a target="_blank" href="http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UIView_Class/UIView/UIView.html#//apple_ref/occ/cl/UIView">UIView</a> En el caso de onTouchUpInside recuperarse del sender (si llevamos a cabo un casting <a target="_blank" href="http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UIView_Class/UIView/UIView.html#//apple_ref/occ/cl/UIView">UIView</a> la propiedad <a target="_blank" href="http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UIView_Class/UIView/UIView.html#//apple_ref/doc/uid/TP40006816-CH3-SW25">tag</a>
1 2 3 4
| void ) onTouchUpInside : ( id ) sender { - (Void) onTouchUpInside: (id) {remitente ( ( UIView * ) sender ) .tag; button_tag unsigned int = ((* UIView) remitente) etiquetas.; / / Todo } |
Continuación ...
Últimos Comentarios
Marcos : @ Marcos: Gracias por la respuesta. Por ejemplo, si usted tiene un código para guardar / utilizar la carpeta ...
Marcos : Gracias por la respuesta. Por ejemplo, si usted tiene un código para guardar / utilizar la carpeta ...
Giovambattista Fazioli : @ Marcos: en principio, absolutamente, mucho depende de cómo y por qué descargar. Luisiana ..
Marcos : Hola, buen guía! Quería preguntarle, usted puede usar el mismo código para ejecutar una base de datos sql? En lugar de ...
José : Hola quería preguntar cómo se puede hacer en el post que he subido una galería de 50 imágenes, por ejemplo, ...