0
votes

'Button.SetImage' ne fonctionne pas lorsque la vueController (contenant) est en arrière-plan

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)
      }
    }


5 commentaires

Ê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.


3 Réponses :


1
votes

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é.

Je pense que Calling SeNeedsDisplay sur la méthode ViewWillappear 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.


3 commentaires

SETNEDSDISPLAY IN VIEWWILLAPPAPPART 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.



1
votes

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)
 }

}


1 commentaires

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?



1
votes

appel de bouton d'appel.set image de fond () il le réglera


0 commentaires