Estou ciente de que essa pergunta já foi feita antes, mas as respostas são contraditórias e estou confuso, então, por favor, não me xingue.
Eu quero ter uma UIView
subclasse reutilizável em todo o meu aplicativo. Eu quero descrever a interface usando um arquivo nib.
Agora, digamos que seja uma visualização do indicador de carregamento com um indicador de atividade. Eu gostaria em algum evento para instanciar esta visão e animar em uma visão do controlador de visão. Eu poderia descrever a interface do modo de exibição sem problemas de forma programática, criando os elementos programaticamente e definindo seu quadro dentro de um método init etc.
Como posso fazer isso usando uma ponta? Manter o tamanho fornecido no construtor de interface sem ter que definir um quadro.
Consegui fazer assim, mas tenho certeza de que está errado (é apenas uma vista com um seletor):
- (id)initWithDataSource:(NSDictionary *)dataSource {
self = [super init];
if (self){
self = [[[NSBundle mainBundle] loadNibNamed:[NSString stringWithFormat:@"%@", [self class]] owner:self options:nil] objectAtIndex:0];
self.pickerViewData = dataSource;
[self configurePickerView];
}
return self;
}
Mas estou sobrescrevendo a si mesmo e quando o instanciar:
FSASelectView *selectView = [[FSASelectView alloc] initWithDataSource:selectViewDictionary];
selectView.delegate = self;
selectView.frame = CGRectMake(0, self.view.bottom + 50, [FSASelectView width], [FSASelectView height]);
Tenho que definir manualmente o quadro em vez de retirá-lo do IB.
EDIT: Eu quero criar este modo de exibição personalizado em um controlador de exibição e ter acesso para controlar os elementos do modo de exibição. Eu não quero um novo controlador de visualização.
obrigado
EDITAR: Não sei se essa é a prática recomendada, tenho certeza que não, mas foi assim que fiz:
FSASelectView *selectView = [[[NSBundle mainBundle] loadNibNamed:[NSString stringWithFormat:@"%@",[FSASelectView class]] owner:self options:nil] objectAtIndex:0];
selectView.delegate = self;
[selectView configurePickerViewWithData:ds];
selectView.frame = CGRectMake(0, self.view.bottom + 50, selectView.width, selectView.height);
selectView.alpha = 0.9;
[self.view addSubview:selectView];
[UIView animateWithDuration: 0.25 delay: 0 options:UIViewAnimationOptionAllowUserInteraction |UIViewAnimationOptionCurveEaseInOut animations:^{
selectView.frame = CGRectMake(0, self.view.bottom - selectView.height, selectView.width, selectView.height);
selectView.alpha = 1;
} completion:^(BOOL finished) {
}];
A prática correta ainda é necessária
Isso deveria ter sido feito usando um controlador de visualização e init com o nome nib? Devo ter definido a ponta em algum método de inicialização UIView no código? Ou o que eu fiz está certo?
initWithDataSource
? De qualquer forma, isso funcionará mesmo se você atribuir o proprietário como 'Nil'.