Como posso fazer a minha carga Nib corretamente o meu personalizado subclasse UIScrollView?
-
08-07-2019 - |
Pergunta
Eu tive uma agradável UIScrollView dentro da minha nib, que funcionou muito bem. Então eu tive algumas necessidades muito especiais e uma subclasse UIScrollView. Na minha Nib, eu mudei a classe no Inspetor de identidade ao meu subclasse.
Mas por alguma razão, meu -initWithFrame: método nunca é chamado quando o carregador nib acumula todos os objetos a partir da ponta. Na verdade eu não mudar nada agora no meu subclasse. E a vista de rolagem apenas funciona bem. Esperar que parece ser um UIScrollView em branco, mesmo que eu disse a ponta deve ser uma SpecializedUIScrollView para fins de teste.
Existe outra coisa que deve considerar quando subclassificação um UIScrollView enquanto ainda estiver usando um arquivo nib para trazê-lo em perspectiva?
Os meus olhares inicializador dedicados como este:
- (id)initWithFrame:(CGRect)frame {
if (self = [super initWithFrame:frame]) {
NSLog(@"Hello !!!!!!!!!!!!!");
}
return self;
}
Eu nunca estou vendo que Olá no console, se eu tentar carga que a partir da ponta. Claro, se eu alloc e inicializar que por mim, ele funciona. Mas eu não quero posicionar meu ponto de vista de rolagem programaticamente ao redor, se posso usar essa maldita legal Interface Builder vez.
Solução
Objetos em uma ponta ou xib são armazenados como objetos serializados, isso pode significar que você tem que usar o método awakeFromNib
porque os métodos de inicialização nunca são chamados.
Outras dicas
Estender initWithCoder
, certifique-se de chamar o método super. É durante este super chamada que setFrame
será chamado em sua classe.
Você pode então voltar a usar o seu padrão initWithFrame
Chamada em initWithCoder
, eo construtor de interface irá controlar o tamanho do quadro.
- (id)initWithCoder:(NSCoder *)aDecoder {
[super initWithCoder:aDecoder]; // Required. setFrame will be called during this method.
return [self initWithFrame:[self frame]];
}