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.

Foi útil?

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]];
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top