potremmo aver necessità di personalizzare la grafica dei titoli delle sezioni, come California o New York dell'esempio qui sotto. Cuando se utiliza un UITableView estilo Grouped podemos necesitar para personalizar el diseño de los títulos de las secciones, como California o Nueva York, el ejemplo de abajo.

Para ello, utilice el siguiente código, colocarlo en el delegado, es decir, en la clase que responde al protocolo UITableViewDelegate :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| / / Devuelve Ver mi costumbre, en este caso un objeto / / Tipo UILabel UIView * ) tableView : ( UITableView * ) tableView - (* UIView) tableView: (UITableView *) tableView NSInteger ) section { viewForHeaderInSection: (NSInteger) section {
[ [ [ UILabel alloc ] initWithFrame : CGRectZero ] autorelease ] ; UILabel * label = [[[UILabel alloc] initWithFrame: CGRectZero] autorelease]; UIFont boldSystemFontOfSize : 20 ] ; label.font = [UIFont boldSystemFontOfSize: 20]; label.textAlignment = UITextAlignmentCenter; UIColor blackColor ] ; label.shadowColor = [UIColor BlackColor]; 1 , 1 ) ; label.shadowOffset CGSizeMake = (1, 1); "Sezione" ; // Sostituire con un array come al solito Label.Text @ = "sección", / / Reemplazar con una serie como de costumbre UIColor whiteColor ] ; label.textColor = [UIColor whiteColor]; UIColor clearColor ] ; label.backgroundColor = [UIColor clearColor]; ; label.opaque = NO;
etiqueta de devolución; } / / También debemos apoyar este mensaje no funcionan de otra manera CGFloat ) tableView : ( UITableView * ) tableView - (CGFloat) tableView: (UITableView *) tableView NSInteger ) section { heightForHeaderInSection: (NSInteger) section { ; retorno 44; } |
También es importante incluir heightForHeaderInSection , no funcionará.
Notas de interés
o UIImageView , ho utilizzato per inizializzare il frame CGRectZero che corrisponde a CGRectMake(0,0,0,0) . En la creación de nuestra UILabel , que también podría ser un objeto de deseo más complejos como una UIView o UIImageView , que utiliza para inicializar la frame CGRectZero correspondiente a CGRectMake(0,0,0,0) .
Continuación ...
creato. Quiero mostrar cómo se puede, con facilidad y rapidez extender una clase UIView de una manera que responde a un nuevo método de inicialización contiene códigos adicionales para personalizar el objeto UIView creado. Como algunos de ustedes probablemente saben, Objective-C no es compatible con un solo fabricante como en las lenguas objeto de otros orientados (como Adobe ActionScript y PHP 5). Es posible, de hecho, crear una instancia de una clase invocando manualmente de diferentes fabricantes (casi infinito). . Normalmente se utilizan para crear objetos UIView con el clásico initWithFrame . Pero imagine que desea crear una nueva clase de objetos visuales, desde un UIView , con algunas adiciones, como una etiqueta incorporada. . Básicamente lo que queremos es que nuestro objeto de crear una instancia que genera, así como la UIView , un objeto de tipo UILabel . Por ejemplo podríamos querer llegar al final:
1
| [ [ ViewLabel alloc ] initWithLabelDefine : CGRectMake ( 0 , 0 , 320 , 80 ) label : @ "Ciao" ] ; ViewLabel vl = * [[ViewLabel alloc] initWithLabelDefine: CGRectMake (0, 0, 320, 80) etiquetas: @ "Hola"]; |
: Para ello basta con crear una nueva clase de tipo UIView y llamar ViewLabel :
1 2 3 4 5 6 7 8 9 10 11 12 13
| / / / / ViewLabel.h / / # Importar <UIKit/UIKit.h> UIView { @ Interface ViewLabel: UIView { * UILabel internalLabel; } id ) initWithLabelDefine : ( CGRect ) frame label : ( NSString * ) labelDefine; - (Id) initWithLabelDefine: (CGRect) etiqueta de fotograma: ( NSString *) labelDefine; @ End |
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 33 34 35 36 37 38 39 40 41 42 43 44
| / / / / ViewLabel.m / / # Import "ViewLabel.h" @ Implementación ViewLabel id ) initWithFrame : ( CGRect ) frame { - (Id) initWithFrame: (CGRect) frame { self = [ super initWithFrame : frame ] ) { if (self = [super initWithFrame: marco]) { / / Código de inicialización } cambio sí; } / / / / El inicializador de nuevo / / id ) initWithLabelDefine : ( CGRect ) frame label : ( NSString * ) labelDefine { - (Id) initWithLabelDefine: (CGRect) etiqueta de fotograma: ( NSString *) {labelDefine self = [ super initWithFrame : frame ] ) { if (self = [super initWithFrame: marco]) { / / Aquí se puede decidir qué hacer, yo por / / Tengo el mismo marco de seguridad en el pasado / / Entrada, pero se restablece el X e Y ; frame.origin.x = 0; ; frame.origin.y = 0; UILabel alloc ] initWithFrame : frame ] ; internalLabel = [[UILabel alloc] initWithFrame: marco]; internalLabel.text = labelDefine; internalLabel ] ; [Self addSubview: internalLabel]; ; [InternalLabel liberación]; } cambio sí; } void ) drawRect : ( CGRect ) rect { - (Void) drawRect: (CGRect) rect { / / Dibujo de código } void ) dealloc { - (Void) {dealloc ; [Super dealloc]; } @ End |
En el momento de la creación de la nueva clase, que podríamos utilizar:
1
| [ [ ViewLabel alloc ] initWithLabelDefine : CGRectMake ( 0 , 0 , 320 , 80 ) label : @ "Ciao" ] ; ViewLabel vl = * [[ViewLabel alloc] initWithLabelDefine: CGRectMake (0, 0, 320, 80) etiquetas: @ "Hola"]; |
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 ...
Últimos Comentarios
Giovambattista Fazioli : @ Paso: Por supuesto. Simplemente identificar el campo [ICC] entrada [/ cci] desea ...
Paso : Hola me gustaría solicitar un servicio, puede utilizar el selector de fechas con cform7 I spiegp lo mejor que puedo poner en práctica ...
Simon : Se molesta perturbado de nuevo y utilizar ese espacio para estas cosas ... sin embargo, no funciona ...
Giovambattista Fazioli : @ Barbara: Si te refieres a la parte inferior para empezar a escribir lo que depende de dónde ...
Barbara : Hola, es muy interesante, pero ¿cómo se escribe en la parte inferior en lugar de lo anterior? Gracias