2016-05-23 4 views
0

J'ai lu que je devrais attendre jusqu'à ce que la vue se charge (ou viewDidLoad()) avant d'essayer d'accéder aux propriétés d'un IBOutlet. Mon problème est le suivant: Je veux stocker la propriété title title d'une UIButton IBOutlet en tant que constante accessible à toute la classe ViewController, ou au moins à partir d'une méthode IBAction dans la classe - mais il semble que ce soit hors de portée puisque je définis la constante à l'intérieur viewDidLoad() et je suis incapable d'y accéder nulle part ailleurs. Je dois l'utiliser dans les deux viewDidLoad() et dans une méthode IBAction.Où accéder à IBOutlet var et l'utiliser pour définir une constante accessible à la classe

Je ne peux pas le définir en dehors de toutes les méthodes de classe parce que je reçois une erreur disant Instance member 'lowFilterButton' cannot be used on type ViewController alors que dois-je faire? Je pourrais coder en dur la couleur dans les deux méthodes, mais je veux trouver une meilleure solution pour référence future.

Répondre

1

Il semble que vous essayez d'accéder à une constante classe dans une méthode d'instance (viewDidLoad()) sans la référence appropriée. Les constantes de classe appartiennent à la classe, et non pas l'instance si vous ne pouvez pas écrire:

color = ...  // invalid 
self.color = ... // invalid 

Est-ce que ceci:

class ViewController: UIViewController { 
    static var color: UIColor! 
    @IBOutlet weak var myButton: UIButton! 

    func viewDidLoad() { 
     super.viewDidLoad() 

     // Refer to the class of the current instance 
     self.dynamicType.color = myButton.tintColor 

     // You can also refer to the class by name 
     ViewController.color = myButton.tintColor 
    } 
} 
1

Si vous souhaitez accéder facilement à une couleur constante, définir avant viewDidLoad() comme ceci:

let myColor = UIcolor.[NAME OF COLOR] 

Ensuite, lorsque vous voulez définir la couleur du bouton, faites-comme ceci:

lowFilterButton.tintColor = myColor 

Tant que vous définissez myColor en dehors de viewDidLoad, vous devriez être en mesure d'y accéder tout au long du contrôleur de vue.

+0

Ma question portait sur la définition de cette première myColor constante en accédant à une propriété de IBOutlet (pas seulement UIColor) qui ne fonctionne pas en dehors d'une méthode. Il a été répondu ci-dessous si! Merci quand même – sboo