J'essaye d'obtenir le UIImageView wCircle
pour changer au rouge quand le UIImageView sur un autre viewController rDot
est tapé. Le problème est, quand je tape rDot
je reçois l'erreur Thread 1: EXC_BAD_INSTRUCTION (code = EXC_I386_INVOP subcode = 0x0)
J'ai fait wCircle
une variable globale afin qu'il puisse être atteint dans l'autre viewController.Changer la couleur de l'image avec tapGesture sur différents viewController
Première viewController
weak var wCircle: UIImageView!
class SecondViewController: UIViewController {
@IBOutlet weak var wCircle: UIImageView!
}
Deuxième viewController
class ProgressViewController: UIViewController {
@IBOutlet weak var rDot: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
rDot.isUserInteractionEnabled = true
let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(rdotimageTapped(tapGestureRecognizer:)))
rDot.addGestureRecognizer(tapGestureRecognizer)
}
func rdotimageTapped(tapGestureRecognizer: UITapGestureRecognizer) {
wCircle.image = wCircle.image!.withRenderingMode(.alwaysTemplate) //error on this line
wCircle.tintColor = UIColor.red
}
}
J'ai fait de mon mieux pour éditer votre code de démarquage - ce n'était pas très logique. (Corrigez si nécessaire Merci!) Après la modification, il semble que du code manque - peut-être pas nécessaire, difficile à dire. Comment le premier contrôleur instancie-t-il le second? 'RdotimageTapped' fonctionne-t-il réellement? (Avez-vous mis un point d'arrêt pour répondre définitivement à cela?) Il peut y avoir d'autres possibilités, mais ce sont les deux premiers qui me sautent aux yeux. – dfd
@dfd merci pour cette modification. Je crois que c'est tout le code nécessaire pour la question. 'rdotimageTapped' fonctionne. Je ne suis pas sûr de ce que vous voulez dire par le viewController qui instancie le second. – Tabj
@Tabj déclarant variable globale en dehors de la classe n'est pas une bonne idée.Pour ce faire, encapsuler vos variables globales dans leur propre classe –