Pergunta

Criei uma subclasse UIView e o arquivo XIB correspondente, onde estabeleci alguns uilabels e uiimageViews. Quero colocar várias cópias deste UIView personalizado em um UIViewController.

Quando faço isso, eles parecem em branco no interface Builder e não aparecem quando o aplicativo é carregado. Quais métodos eu preciso implementar na subclasse UIView para fazer isso funcionar?

Foi útil?

Solução

O método mais fácil de longe é criar uma ponta com o proprietário do arquivo definido para o NSObject, contendo uma visualização contendo seu elemento de layout.

Então

NSArray *arr = [[NSBundle mainBundle] loadNibNamed:@"MyView" owner:nil options:nil];
UIView *fv = [[arr objectAtIndex:0] retain];

// now you have the view, do something with it:
fv.center = CGPointMake(100,100);
[self.view addSubview:fv];

Não há necessidade de fazer nada com o proprietário do arquivo; Está até definido como nulo aqui.

Outras dicas

Isso é semelhante ao uso de um arquivo NIB para criar células de exibição de tabela. Aqui é uma página que discute como fazer isso.

Você precisará colocar uma saída em seu UIViewController subclasse para a visualização personalizada e defina o UIViewController Subclasse como o "proprietário do arquivo" no seu arquivo NIB (.xib) de exibição personalizado. Em seguida, conecte a tomada que você criou ao objeto de visualização de nível superior (novamente no seu arquivo NIB de exibição personalizado).

Em seguida, cada vez que você deseja instanciar sua visualização personalizada no código do controlador de visualização, ligue para:

[[NSBundle mainBundle] loadNibNamed:<custom view nib name> owner:self options:nil];

A saída que você adicionou será definida para apontar para uma nova instância da sua visualização personalizada.

A única desvantagem dessa abordagem é que você terá que estabelecer as instâncias da sua visualização personalizada em seu controlador de exibição programaticamente, em vez de graficamente no construtor de interface.

Outra abordagem criaria os rótulos e imagens de venda programaticamente em seu UIView subclasse, e então você pode adicioná -lo ao construtor de interface como faria qualquer outro UIView subclasse.

Editar: Infelizmente no Xcode 4.0, esse recurso foi removido.

Depois de configurar sua subview no interface Builder, você pode criar um novo grupo (use o botão deggelo na parte inferior da janela da biblioteca) e arraste seu objeto de subclasse (contendo suas imagens e etiquetas) da visualização da lista (ou seja, não o layout visualizar) de volta à janela da biblioteca.

Em seguida, você pode adicionar graficamente várias instâncias da sua subclasse de exibição a qualquer visualização ou janela do construtor de interface como faria com os objetos internos na biblioteca.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top