J'utilise le modèle de délégation pour mon application basée sur CoreBluetooth. J'ai une visionneuse principale qui est un délégué à ma classe Blehandler. Je mettez à jour un bouton basé sur la réponse que je reçois de la méthode de délégation suivante:
func acIsOn(error: NSError?) {
if error == nil{
pushButton.setImage(UIImage(named: "state4"), for: .normal)
}
}
3 Réponses :
Vous essayez de modifier un élément d'interface utilisateur sur un mode de vue qui n'est pas affiché actuellement. Il mettra à jour les valeurs mais aucun rafraîchissement sur l'interface utilisateur sera exécuté. P>
Je pense que Calling SeNeedsDisplay code> sur la méthode ViewWillappear code> sur votre mode de vue corrigera votre problème.
Vous pouvez également utiliser une image variable et mettre à jour l'image du bouton lorsque le contrôleur s'affiche à nouveau. P>
SETNEDSDISPLAY CODE> IN VIEWWILLAPPAPPART CODE> n'a pas fonctionné. Oui, je pourrais le faire en utilisant une image variable mais j'essaie d'apprendre le problème ici. Merci!
Utilisez-vous un contrôleur de navigation?
Oui, j'utilise le contrôleur de navigation.
Déplacez le code de mise à jour de l'interface utilisateur dans la fenêtrewillappear comme ceci:
class MainViewController: UIViewController, BLEHandler {
var isUIUpdateNeeded = false
//Define your UI outlets or proeprties
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override func viewWillAppear(_ animated: Bool) {
if isUIUpdateNeeded {
updateUI()
}
}
func acIsOn(error: NSError?) {
if error == nil{
pushButton.setImage(UIImage(named: "state4"), for: .normal)
}
}
func updateUI() {
//do your UI changes here
pushButton.setImage(UIImage(named: "state4"), for: .normal)
}
}
Merci! Olivier a dit une chose similaire mais je veux juste savoir pourquoi le code actuel ne le met pas à jour, quelle est la limitation?
appel de bouton d'appel.set image de fond () il le réglera up>
Êtes-vous sûr que l'état du bouton est .normal?
@FEDHENZE OUI.
"Aussi, je me suis assuré que cette méthode était appelée lorsque la vue ViewController n'est pas au premier plan." signifie que la cérémonie de vue n'est pas visible lorsque la fonction est appelée? L'application entière est-elle au premier plan ou en arrière-plan?
@FeDehenze Oui, cela signifie que la cityController (contrôlant ce bouton) n'est pas visible mais l'application est en cours d'exécution au premier plan affichant un autre VC.
Maintenant, essayez de loger, essayez d'ajouter un drapeau dans la mentalité de vue pour savoir que l'interface utilisateur doit être mise à jour et appelez les modifications de l'interface utilisateur dans la viewwillappear.