2017-07-27 5 views
-4

Zugang nur mit Swift. Haben Sie wenige Benutzeroberfläche auf dem Bildschirm, möchten Sie etwas mit der Benutzeroberfläche tun, wenn eine bestimmte Bedingung befolgt wird. Die Frage ist, wenn wir die Benutzeroberfläche und erhalten Sie Zugriff auf Dinge wie @IBoutlet wie untenWie @IBOutlet schwach var

@IBOutlet weak var modifiedSegmentLoginRegister: UISegmentedControl! 

ziehen Wie es außerhalb

func viewDidLoad(){ 
its accessible here 
} 

Zugang zu aber nicht acessible außerhalb

nicht bekommen kann modifiedSegmentLoginRegistrieren Sie hier.

+0

zeigen Sie uns die ganze Klasse –

+0

@JAL Ich habe gerade überprüft. Sie können die Steckdose nicht in den Bereich "func" ziehen. Es ist nur möglich, in den Bereich "Klasse" zu ziehen. Warum: Weil die Klasse eine Instanz der VC darstellt, die sich auf dem Storyboard befindet, und die Eigenschaft, die Sie erstellen (durch Ziehen), ist die Eigenschaft der Instanz der Klasse und kann nicht in die Funktion gezogen werden. Bitte lassen Sie mich wissen, wenn ich falsch liege. –

+0

@TungFam Du hast wahrscheinlich Recht, das war nur eine Vermutung, während ich weg von Xcode war. So oder so, ich denke, das Problem ist, dass die Steckdose falsch eingerichtet wurde. – JAL

Antwort

0

Sie können nicht darauf zugreifen, weil es ist, wie es konzipiert ist (bis jetzt diese Informationen ausreichen werden).

Was Sie tun müssen, um darauf zuzugreifen: Erstellen Sie Funktionen, die Ihr Ereignis auslösen, wenn Sie diese Prüfungen für diese bestimmten Bedingungen durchführen müssen. In diesen Funktionen können Sie auf das Outlet zugreifen.

Zum Beispiel: fügen Sie die Schaltfläche, um Ihre ViewController> ziehen Sie es in den Code> wählen Action (aber nicht Outlet)> in diesem Verfahren versuchen zu tun, was man braucht (diese Bedingungen usw. überprüfen)> Sie werden sehen, dass die Outlet wird zugänglich sein.

0

So werden IBOutlets nicht wirklich geladen, bis die Ansicht geladen wird. Sie sind also erst nutzbar, wenn viewDidLoad aufgerufen wird. Sie könnten eine var in Ihrem VC erstellen und dann mit ihm dort in Wechselwirkung treten, fügen Sie es dann zu der Ansicht

view.addSubview(item); 
0

Ich gehe davon aus, dass Sie versuchen, auf eine Eigenschaft oder Methode des UISegmentedControl zuzugreifen. Beispiel: modifiedSegmentLoginRegister.setTitle("A" :forSegmentAt: 0)

Das IBOutlet ist wie jede andere Variable. Es kann außerhalb einer Funktion als Instanzvariable deklariert oder initialisiert werden. Wenn Sie es jedoch ändern oder darauf zugreifen möchten, müssen Sie dies in einer Funktion wie viewDidLoad tun. Sie können nicht auf "Zugriff außerhalb" zugreifen.

+0

Danke für die Info, so gibt es einen möglichen Weg, es außerhalb des Umfangs zu tun AnsichtDidLoad? –

+0

Sie können darauf in jeder Funktion zugreifen. Zum Beispiel könnten Sie einen Knopf oder eine andere Art von IBAction anschließen. Oder Sie könnten Ihre eigene Funktion erstellen, die viewDidLoad oder etwas anderes aufruft. –