2017-08-24 2 views
0

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  
    } 
} 
+0

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

+0

@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

+0

@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 –

Répondre

0

votre code n'est pas organisé et rien indiquer toute façon

changer cette ligne de code

remplacer weak var wCircle: UIImageView!

avec

weak var wCircle = UIImageView() 

et ce

func rdotimageTapped(tapGestureRecognizer: UITapGestureRecognizer) { 
    wCircle?.image = whiteDot.image!.withRenderingMode(.alwaysTemplate) //error on this line 
    wCircle?.tintColor = UIColor.red 
} 
+0

avec ce code lorsque je tape sur 'rDot' rien ne se passe. Le tapGesture ne fonctionne pas. – Tabj

+0

cela fonctionne mais où est l'image WCircle Est-il connecté à IBoutlet ou quoi? –

+0

Je l'ai connecté à IBoutlet dans le premier viewController. – Tabj

0

wCircle est variable faible et il est en option value.So lorsque vous appelez des autres classes, il ne peut pas être facultative. Aussi en faire une variable forte