2017-07-25 2 views
0

So habe ich einen View-Controller mit einer Schaltfläche, die ich nur sichtbar, wenn alle drei Textfelder gefüllt sind, innerhalb jeder Klasse, wo eine Änderung passiert, ich setze :Button nicht versteckt, wenn Funktion von einer anderen Klasse programmgesteuert aufgerufen wird [Swift 3]

ViewController().checkDoneButton() 

Dann ist die Funktion ist:

func checkDoneButton(){ 
    if (textField1.text != "" && textField2.text != "" && textField3.text != ""){ 
     doneButton.isHidden = false 
     print("Done!") 
    } 
} 

die Konsole prints "Fertig!", aber die Schaltfläche nicht sichtbar ist. Wenn ich jedoch die Funktion checkDoneButton() mit einer Schaltfläche vom selben View-Controller aufrufen möchte, wird die Schaltfläche angezeigt. Wenn jemand helfen kann, wäre das großartig. Vielen Dank im Voraus

+0

Sie rufen dieses 'checkDoneButton' aus dem Hintergrund Thread sicher können Sie, wo Sie diese Methode aufrufen? –

+1

'ViewController(). CheckDoneButton()' ?? Warum erstellst du ein neues Objekt? Sie sollten die Instanz Ihres anderen View-Controllers behalten und checkDoneButton aufrufen. – Bilal

Antwort

2

Problem ist damit.

ViewController().checkDoneButton() 

ViewController() erstellt eine neue Instanz von ViewController. Sie sollten die checkDoneButton() auf der gleichen Instanz von ViewController aufrufen, die präsentiert wurde.

Sie können Delegate-Muster verwenden, um dieses Problem zu beheben. Hier sind einige Tutorials. Tutorial 1Tutorial 2Tutorial 3

+0

Das stimmt. Wir können Delegate- oder Observer-Entwurfsmuster verwenden, um dieses Problem zu vermeiden. – ngbaanh

Verwandte Themen