Responda à pergunta de ILeW com um artigo para explicar melhor em si, juntando exemplo de trabalho, como delegados e notificações. Usando um padrão que vemos primeiro como padrão o delegado:

Um objeto em busca de um delegado
Responda à pergunta de ILeW com um artigo para explicar melhor em si, juntando exemplo de trabalho, como delegados e notificações. Usando um padrão que vemos primeiro como padrão o delegado:

Um objeto em busca de um delegado
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.
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) .
non funzionano quando un UIButton è impostato in modalità UIButtonTypeCustom ! Os estados UIControlStateSelected ou UIControlStateHighlighted não funcionam quando um UIButton modo é definido UIButtonTypeCustom ! Ou melhor, não funciona (porque reservado para outros tipos de botão), por exemplo, para criar um botão com dois estados: nota de alternância. Se nós criamos duas imagens (stato1.png e stato2.png) para o nosso botão, podemos proceder da seguinte forma:
1 2 3 | / / O arquivo de cabeçalho que nós criamos uma variável global para usaremo / / Mude o cheque foi ToggleFlag BOOL; |
Agora vamos criar o nosso botão:
1 2 3 4 5 6 7 8 9 | / / Criamos um botão e nós colocá-lo inicialmente no estado "stato1.png" / / Edit initWithFrame: (CGRect)} {100,100,50,50 com a posição e / / Tamanho da sua imagem tem ; toggleFlag = YES; [ [ UIButton buttonWithType : UIButtonTypeCustom ] initWithFrame : ( CGRect ) { 100 , 100 , 50 , 50 } ] ; UIButton ToggleButton * = [[UIButton buttonWithType: UIButtonTypeCustom] initWithFrame: (CGRect) {100, 100, 50, 50}]; @ "" forState : UIControlStateNormal ] ; [ToggleButton setTitle: @ "" forState: UIControlStateNormal]; [ UIImage imageNamed : @ "stato1.png" ] forState : UIControlStateNormal ] ; [ToggleButton setBackgroundImage: [UIImage imageNamed: @ "stato1.png"] forState: UIControlStateNormal]; self action : @selector ( onToggle : ) forControlEvents : UIControlEventTouchUpInside ] ; [AddTarget ToggleButton: acção de auto: @ selector (onToggle :) forControlEvents: UIControlEventTouchUpInside]; toggleButton ] ; [Self.view addSubview: ToggleButton]; |
Quando você clicar no botão irá enviar uma mensagem para ser gerido onToggle :
1 2 3 4 5 6 7 | void ) onToggle : ( id ) sender { - (Void) onToggle: (id) sender { / / Recuperar ponteiro para UIButton ( UIButton * ) sender; UIButton buttonClicked * = (UIButton *) remetente; / / Executar o Toogle toggleFlag = toggleFlag!; [ UIImage imageNamed : ( toggleFlag ) ? @ "stato1.png" : @ "stato2.png" ] forState : UIControlStateNormal ] ; [ButtonClicked setBackgroundImage: [UIImage imageNamed: (toggleFlag) @ "Stato1.png" @ "stato2.png"] forState: UIControlStateNormal]; } |
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 |
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á"]; |
Como indicado na pós Apple iPhone SDK 3,0: incompatibilidade primeiro do SDK da Apple 3,0 mostram comportamentos diferentes no que diz respeito a libertar 2.2.1. O serviço de suporte para os desenvolvedores me deu a resposta, e então a solução para o problema. . A resposta foi que o suporte técnico [UIButton buttonWithType:] já chamado - no interior - o initWithFrame . Daqui resulta que, de acordo com o suporte técnico, escrevendo:
Depois de instalar o 3.0 SDK para o iPhone da Apple, evidentemente, ainda não perfeitamente estável, de imediato, notei alguns problemas, tanto na compilação do código está no XCode geral. O mais importante - o que eu prontamente relatado com uma "casa" para desenvolvedores da Apple, no centro - a criação de botões através de código. Aqui está um trecho do código não é compatível com o SDK 3.0:
1 2 3 4 | [ [ UIButton buttonWithType : UIButtonTypeRoundedRect ] initWithFrame : CGRectMake ( 0 , 0 , 100 , 40 ) ] ; UIButton * myButton = [[UIButton buttonWithType: UIButtonTypeRoundedRect] initWithFrame: CGRectMake (0, 0, 100, 40)]; @ "Bottone" forState : UIControlStateNormal ] ; [MyButton setTitle: @ "Button" forState: UIControlStateNormal]; / / Outras configurações myButton ] ; [Self.view addSubview: myButton]; |
Ao preencher este código com o SDK 2.2.1 você tem um botão clássico com o rótulo de "Button". Com o SDK 3.0, o botão é criado, mas o rótulo desaparece. la situazione sembra migliorare, nel senso che la label viene resa apparentemente in modo corretto. Utilizando como buttonWithType o tipo UIButtonTypeCustom a situação parece melhorar, no sentido de que a etiqueta é aparentemente feita correctamente. Ainda é estranho para a falha súbita do tipo UIButtonTypeRoundedRect . Ainda estou aguardando uma resposta da Apple ... Eu só novidades; lugar!
Ú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 ...