Domanda

Ho un UIButton su una UIView. Voglio capire programmaticamente quale immagine visualizzare all'interno del pulsante quando viene visualizzata la vista. Ho ignorato il metodo drawRect in UIView e ho usato un setImage per visualizzare l'immagine desiderata. Tuttavia, quando viene visualizzata la vista, a volte disegna l'immagine desiderata, a volte no. Devo toccare un punto qualsiasi della vista per visualizzare l'immagine nel pulsante. Per favore, aiutate!

Ecco il metodo drawRect per la vista.

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

Tutto è correttamente cablato IB. Non capisco perché l'immagine appaia / non appaia in modo coerente. Grazie mille.

È stato utile?

Soluzione

Non vuoi davvero scavalcare drawRect.

La cosa giusta da fare è implementare un UIViewController e sovrascrivere viewWillAppear: .

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

Altri suggerimenti

marmotta ha la la risposta giusta , ma Vorrei solo spiegare cosa sta realmente accadendo con il tuo codice e perché funziona qualche volta.

Il metodo drawRect viene chiamato ogni volta che il sistema desidera che l'oggetto di visualizzazione venga visualizzato sullo schermo. L'impostazione dell'immagine del pulsante nel metodo drawRect cambierà l'immagine del pulsante, ma poiché il sistema è già in procinto di disegnare sullo schermo, in realtà non vedrai la modifica fino alla prossima volta le viste devono essere ridisegnate. In questo caso, quando tocchi altrove nella vista.

Grazie per la spiegazione. Sfortunatamente, questo codice fa parte di un progetto più ampio con un altro sviluppatore. NON POSSO cambiare l'UIView corrente in UIViewController. Invece, ho cambiato l'immagine del pulsante in un altro modo. Ho cambiato lo stato del pulsante appena prima di aggiungere l'UIView alla sottoview del proprietario ViewController. vale a dire: ho rilasciato il

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

Appena prima di aggiungere il mio UIView come subView. vale a dire:

[masterViewController.view addSubview:myView];

ovviamente myButton fa parte di myView. Grazie per l'assistenza.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top