UIButton e setImage: não trabalhando de forma consistente - inconsistentes
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.
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.