Pergunta

Eu tenho um UIButton em um UIView. Quero descobrir programaticamente a qual imagem será exibida dentro do botão quando a vista é exibida. I ter anulado o método drawRect no UIView e utilizado um setImage para exibir a imagem desejada. No entanto, quando a vista é exibida, às vezes ele desenha a imagem desejada, e às vezes isso não acontece. Eu tenho que tocar em qualquer lugar na vista para que a imagem aparecer no botão. Por favor, ajuda!

Aqui está o método drawRect para a vista.

- (void)drawRect:(CGRect)rect
{
[myButton setImage:[UIImage imageNamed:@"myImage.png"] forState:UIControlStateNormal];
}

Tudo é ligado até IB corretamente. Eu não entendo por que as aparece imagem / não aparecer de forma consistente. Muito obrigado.

Foi útil?

Solução

Você realmente não deseja substituir drawRect.

A coisa apropriada a fazer é implementar um UIViewController e override viewWillAppear:.

-(void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [self.myButton setImage:[UIImage imageNamed:@"myImage.png"] forState:UIControlStateNormal];
};

Outras dicas

marmota tem a resposta certa , mas Eu gostaria apenas de explicar o que está realmente acontecendo com o seu código, e por que ela funciona por algum tempo.

O método drawRect é chamado sempre que o sistema quer o seu objeto de exibição para exibir-se na tela. Definir a imagem do botão no método drawRect irá alterar a imagem do botão, mas desde que o sistema já está em processo de desenho para a tela, você realmente não vai ver a mudança até que o próximo tempo os pontos de vista precisa ser redesenhada. Neste caso, quando você toca em outro lugar na vista.

Obrigado pela explicação. Infelizmente, este código é parte de um projeto maior com outro desenvolvedor. Eu não posso mudar o UIView atual para um UIViewController. Em vez disso, eu mudei a imagem do botão em outra moda. Mudei o estado do botão logo antes de adicionar o UIView ao subexibição do ViewController possuir. ou seja: I emitiu o

[myButton setImage:[UIImage imageNamed:@"myImage.png"] forState:UIControlStateNormal];

Apenas antes de adicionar o meu UIView como um subview. ou seja:

[masterViewController.view addSubview:myView];

Obviamente, myButton é parte de myView. Agradecimentos para a ajuda.

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