potremmo aver necessità di personalizzare la grafica dei titoli delle sezioni, come California o New York dell'esempio qui sotto. Quando usamos um UITableView estilo Grouped podemos precisar para personalizar o layout de títulos das seções, como a Califórnia ou Nova Iorque o exemplo abaixo.

Para fazê-lo, por favor use o seguinte código, colocando-a ao delegado, ou seja, a classe que responde ao protocolo UITableViewDelegate :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| / / Eu retornar a minha exibição personalizada, neste caso um objeto / Tipo / UILabel UIView * ) tableView : ( UITableView * ) tableView - (UIView *) tableView: (UITableView *) tableView NSInteger ) section { viewForHeaderInSection: seção (NSInteger) {
[ [ [ 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 @ = "Seção", / / Replace com uma matriz, como de costume UIColor whiteColor ] ; label.textColor = [UIColor whiteColor]; UIColor clearColor ] ; label.backgroundColor = [UIColor clearColor]; ; label.opaque = NO;
voltar rótulo; } / / Devemos também apoiar esta mensagem não irá funcionar CGFloat ) tableView : ( UITableView * ) tableView - (CGFloat) tableView: (UITableView *) tableView NSInteger ) section { heightForHeaderInSection: seção (NSInteger) { ; voltar 44; } |
É também importante incluir heightForHeaderInSection , não irá funcionar.
Notas de Interesse
o UIImageView , ho utilizzato per inizializzare il frame CGRectZero che corrisponde a CGRectMake(0,0,0,0) . Na criação do nosso UILabel , querendo que também poderia ser um objeto mais complexo, como um UIView ou UIImageView , eu usado para inicializar o frame CGRectZero o que corresponde a CGRectMake(0,0,0,0) .
Leia mais ...
creato. Quero mostrar como é possível, de uma forma simples e rápida, estender uma classe UIView de tal maneira que responde a um método de inicialização de novo contendo ainda o código objecto para personalizar UIView criado. Como alguns de vocês provavelmente sabem, Objective-C não suporta um único fabricante como nas línguas objeto outras orientadas (como o Adobe ActionScript ou PHP5). E 'pode, de fato, criar uma instância de uma classe manualmente invocando diferentes fabricantes (quase infinita). . Normalmente, são usados para criar objetos UIView com o clássico initWithFrame . Suponha que, no entanto, queremos criar uma nova classe de objetos visuais, a partir de um UIView , com alguma adição, esse rótulo é incorporado. . Basicamente o que nós queremos é que instanciar o nosso objeto que ele cria, bem como o UIView , um objeto do tipo UILabel . Por exemplo, podemos querer chegar ao fim:
1
| [ [ ViewLabel alloc ] initWithLabelDefine : CGRectMake ( 0 , 0 , 320 , 80 ) label : @ "Ciao" ] ; ViewLabel * vl = [[ViewLabel alloc] initWithLabelDefine: CGRectMake rótulo (0, 0, 320, 80): @ "Olá"]; |
: Para isso basta criar uma nova classe de tipo UIView e chamada 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) rótulo de quadro: ( 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 / / # Importar "ViewLabel.h" @ Implementação ViewLabel id ) initWithFrame : ( CGRect ) frame { - (Id) initWithFrame: frame (CGRect) { self = [ super initWithFrame : frame ] ) { if (self = [super initWithFrame: frame]) { / Inicialização / código } retornar auto; } / / / / Inicializador nosso novo / / id ) initWithLabelDefine : ( CGRect ) frame label : ( NSString * ) labelDefine { - (Id) initWithLabelDefine: (CGRect) rótulo de quadro: ( NSString *) {labelDefine self = [ super initWithFrame : frame ] ) { if (self = [super initWithFrame: frame]) { / / Aqui você pode decidir como se comportar, eu para / / Eu tenho o mesmo quadro de segurança no passado / / Entrada mas eu redefinir a x e y ; frame.origin.x = 0; ; frame.origin.y = 0; UILabel alloc ] initWithFrame : frame ] ; internalLabel = [[UILabel alloc] initWithFrame: quadro]; internalLabel.text = labelDefine; internalLabel ] ; [Self addSubview: internalLabel]; ; [InternalLabel release]; } retornar auto; } void ) drawRect : ( CGRect ) rect { - (Void) drawRect: (CGRect) {rect Código / Desenho / } void ) dealloc { - (Void) {dealloc ; [Super dealloc]; } @ End |
Na época da criação da nossa nova classe, podemos usar:
1
| [ [ ViewLabel alloc ] initWithLabelDefine : CGRectMake ( 0 , 0 , 320 , 80 ) label : @ "Ciao" ] ; ViewLabel * vl = [[ViewLabel alloc] initWithLabelDefine: CGRectMake rótulo (0, 0, 320, 80): @ "Olá"]; |
Leia mais ...
Como mencionado iPhone FirstApp: Adivinhe o número - Parte 1 vemos como fazer um aplicativo para o iPhone da Apple sem usar o Interface Builder! Na verdade, vamos eliminar arquivos físicos criados pela Interface Builder assistente Xcode. No final deste post, então, temos um pedido idêntico em todos os aspectos, àquelas construídas na primeira parte, com a diferença que nós vamos alcançar todos os nossos componentes visuais, incluindo a janela principal, para o código completo.
O aplicativo já feito, se você quiser apenas fazer o download, está disponível no meu repositório do Google Code:
Eu gostaria de apontar imediatamente como o ZIP deste exemplo pesa menos que a última vez! 
Criamos o projeto
Começamos criando o nosso projeto SecondApp (para distingui-lo de FirstApp), embora desta vez escolha Janela aplicativo baseado em:

Agora vamos apagar tudo relacionado com o Interface Builder. : eliminatelo anche dal file system, quindi selezionate Also Move to Trash . Elimine o arquivo MainWindow.xib , localizado na pasta de Resources , remova-o do sistema de arquivos também, e em seguida, selecione também mover para a lixeira. nella casella Main nib file base name : Selecione então o arquivo SecondoApp-info.plist e excluir a referência ao MainWindow arquivo nib no nome da caixa principal com base em:

Neste ponto não temos mais qualquer janela, pelo menos até o Interface Builder. , e modifichiamo la funzione main() in questo modo: Então vamos abrir o arquivo main.m , situado em Other Sources , e modificar a função main() , exemplo:
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]; / / Ao remover o arquivo. XIB perdemos rastreamento / / O delegado app e então passá-lo para "mão" UIApplicationMain ( argc, argv, nil , @ "SecondAppAppDelegate" ) ; int retVal = UIApplicationMain (argc, argv, nil, @ "SecondAppAppDelegate"); ; [Lançamento Piscina]; voltar retVal; } |
Abra SecondAppAppDelegate.me então criar a janela principal via código:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| void ) applicationDidFinishLaunching : ( UIApplication * ) application { - ApplicationDidFinishLaunching (Void): (UIApplication *) {aplicação
/ / Pega o tamanho da tela (320, 480) UIScreen mainScreen ] applicationFrame ] ; CGRect windowRect = [[mainScreen UIScreen] applicationFrame]; / / Cria uma janela - como fizemos adeus ao Interface Builder [ [ UIWindow alloc ] initWithFrame : windowRect ] ; UIWindow MainWindow * = [[UIWindow alloc] initWithFrame: windowRect]; / / Definir o fundo da Janela para o amarelo, para diferenciar / / O pedido anterior FirstApp [ UIColor yellowColor ] ] ; [MainWindow SetBackgroundColor: [UIColor yellowColor]];
mainWindow ] ; [Self setWindow: MainWindow]; ; [Janela makeKeyAndVisible];
; [MainWindow release]; } |
Você já pode testar o aplicativo, se aparece uma janela amarela que você fez tudo certo!
, necessario solo se si usa Interface Builder. No arquivo SecondAppAppDelegate.h podemos eliminar IBOutlet , só é necessário se você usa o Interface Builder. Também acrescentar aqui que nossas variáveis globais, a última vez que tinha entrado no controlador. Em seguida, modifique o arquivo SecondAppAppDelegate.h :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| # Importar <UIKit/UIKit.h> NSObject <UIApplicationDelegate> { @ SecondAppAppDelegate Interface: NSObject {<UIApplicationDelegate> UIWindow janela *; UITextField * número; UIButton * botão; int numeroACaso; } nonatomic, retain ) UIWindow * window; @ Property (nonatomic, reter) UIWindow janela *; void ) controllaNumero; - (Void) getNumber; @ End |
, in quanto non stiamo usando Interface Builder. Também neste caso, nós preparamos a definição do método controllaNumero , como da última vez, mas nós eliminamos a indicação IBAction , uma vez que não estamos usando o Interface Builder.
Nós construímos o código da interface
É hora de criar o código usando todos os componentes de nossa interface. ed inseriamo il seguente codice: Voltamos no arquivo SecondAppAppDelegate.m , posizioniamoci antes [mainWindow release] e insira o seguinte 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
| / / Cria a 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: @ "Acho que um número"]; navigationItem animated : NO ] ; [MyNavigationBar pushNavigationItem: navigationItem animado: NO]; myNavigationBar ] ; [Janela addSubview: myNavigationBar];
/ / Criar o rótulo [ [ 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 = @ "iPhone criou um número de 1 a 10, tentar adivinhar?" myLabel ] ; [Janela addSubview: myLabel];
/ / Criar a 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 = @ "Digite o número"; numero ] ; [Janela addSubview: número];
/ / Cria o botão UIButton buttonWithType : UIButtonTypeRoundedRect ] ; botão = [UIButton buttonWithType: UIButtonTypeRoundedRect]; 10 , 180 , 300 , 30 ) ; bottone.frame = CGRectMake (10, 180, 300, 30); @ "Premi qui" forState : UIControlStateNormal ] ; [Botão setTitle: @ "Clique aqui" forState: UIControlStateNormal]; self action : @selector ( controllaNumero ) forControlEvents : UIControlEventTouchUpInside ] ; Botão [AddTarget: acção de auto: @ selector (getNumber) forControlEvents: UIControlEventTouchUpInside]; bottone ] ; [Janela addSubview: botão];
; [MyLabel release]; ; [NavigationItem release]; ; [MyNavigationBar release]; |
della scorsa volta, subito dopo il [mainWindow release]; inseriamo: Desde o ' applicationDidFinishLaunching corresponde a viewDidLoad como da última vez, logo após a [mainWindow release]; inserção:
1
| + arc4random ( ) % 10 ; numeroACaso = 1 + arc4random () 10%; |
Agora, podemos fazer é implementar o método controllaNumero , que será idêntico (para além do protótipo) à utilizada a ú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) {getNumber "Premuto bottone di controlla numero" ) ; NSLog (@ "número de controle pressionado o botão"); [ numero.text integerValue ] ; numeroInserito int = [numero.text integerValue]; message; NSString * mensagem; "Il numero inserito è %d" , numeroInserito ) ; NSLog (@ "O número digitado é% d", numeroInserito); numeroInserito <numeroACaso ) { if (numeroInserito <numeroACaso) { "Troppo basso..." ; mensagem = @ "muito baixo ..."; ( numeroInserito> numeroACaso ) { } Else if (numeroInserito> numeroACaso) { "Troppo alto..." ; mensagem = @ "muito alto ..."; ( numeroInserito == numeroACaso ) { } Else if (numeroInserito numeroACaso ==) { "Bravo hai indovinato" ; mensagem = @ "Bravo você adivinhou-lo"; + arc4random ( ) % 10 ; numeroACaso = 1 + arc4random () 10%; "Numero pensato %d" , numeroACaso ) ; NSLog (@ "% d Número pensei," numeroACaso); } [ [ UIAlertView alloc ] UIAlertView alertMessaggio * = [[UIAlertView alloc] "Responso" initWithTitle: @ "Resposta" mensagem: mensagem delegado: nil "OK" cancelButtonTitle: @ "OK" ] ; otherButtonTitles: nil]; ; [AlertMessaggio show]; ; [AlertMessaggio release]; "" ; numero.text @ = ""; } |
Nós somos feitos!
Conclusões e considerações
, proprio perchè volevo lasciarlo il più semplice e snello possibile e, anche, per dimostrare che non sono elementi sempre necessari. Este exemplo não fazer uso direto de um UIView ou UIViewController , porque eu queria deixá-lo tão simples e aligeirados quanto possível e, também, para mostrar que os elementos não são sempre necessários. No entanto, a inserção de objetos diretamente na janela pode ter algum sentido neste exemplo e em outros contextos esporádicos. portano comunque benefici in tantissimi altri casi, ein alcuni sono praticamente indispensabili; come avremo modo di vedere in futuro. O uso de UIView e UIViewController ainda trazer benefícios em muitos outros casos, ena alguns são quase indispensáveis, como veremos no futuro.
Leia mais ...
A primeira fonte que eu fui em suas mãos foi escrito em Basic e consistia de algumas linhas de código, para iluminar-me. Era um jogo simples que gerou um número aleatório de 1 a 10 e, através da entrada de teclado, provou que o número digitado foi Maggione, inferior ou igual ao número aleatório. Apesar de sua simplicidade rude continua a ser, para mim, um dos melhores exemplos - simples, divertido e prático - para explicar a quem não sei nada sobre programação que se entende realmente de "programa de computador". Então eu decidi propor-lo para o iPhone da Apple, talvez ajude alguém ...
Leia mais ...
Últimos Comentários
Gabriel : Olá, interessante artigo. Eu preciso de algo semelhante, mas com algumas mudanças. Em um ...
sebastian : grande parcela - muito obrigado!
Assunto : muito útil mesmo! Eu tentei isso e é exatamente o que eu precisava. Agora eu quero saber como faço para obter ...
vik : Com a ajuda estratégica!
Pimenta : Olá, eu não sei se você é um dos criadores do plugin WP Bannerize. Tenho visto um ...