2017-07-25 5 views
0

Im folgenden Code möchte ich in der Lage sein, die Sichtbarkeit einer Schaltfläche in einer anderen Klasse zu ändern, aber wenn ich button.isHidden auf false ändern, wird die Schaltfläche weiterhin nicht angezeigt oben.Ändern Sie das Merkmal einer Schaltfläche außerhalb der Klasse programmatisch

View Controller 1:

override viewDidLoad(){ 
    button.isHidden = true 
} 

View Controller 2:

ViewController1().button.isHidden = false 

Wie kann ich die Schaltfläche Sichtbarkeit von einem anderen Controller ändern

+1

Sie müssen habe irgendwie einen Verweis auf den Button oder einen Verweis auf ViewController1. Es hängt davon ab, wie Sie Ihren Code eingerichtet haben. Welche Beziehung hat ViewController1 zu ViewController2? Erstellen eines neuen 'ViewController1' mit' ViewController1() 'bedeutet, dass Sie zwei' ViewController1's haben, so dass das Ändern des Buttons auf einen keinen Effekt auf das Original 'ViewController1' hat. –

Antwort

1

ViewController1() Aufruf erstellt eine ViewController1 Instanz, anstatt zu arbeiten mit die ViewController1 Instanz, die bereits instanziiert wurde.

Eigenschaften zuzugreifen (in diesem Fall die Taste) von ViewController1 von ViewController2 Sie eine Referenz auf diese Schaltfläche ViewController1-ViewController2 passieren müssen und die Eigenschaften durch diesen Verweis ändern.

Sie müssen die Referenz in Ihrer prepare(for segue) Funktion in ViewController1 setzen.

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if segue.identifier == "mySegue { 
     let nextVC = segue.destination as! ViewController2 
     nextVC.button = sender as! UIButton 
    } 
} 

Sie müssen auch die Segue auf manuell einzustellen und nennen es in ViewController1 von self.performSegue(withIdentifier: "mySegue", sender: self.button)

Sie müssen die Eigenschaft in ViewController2 und darauf zuzugreifen wie diese erstellen:

class ViewController2 { 
    var button:UIButton? 

    func showButtonOnVC1(){ 
     guard let button = self.button else { return } 
     button.isHidden = false 
    } 

} 
Verwandte Themen