2016-03-23 15 views
0

Ich bin neu bei Swift, also entschuldige ich mich für mein mangelndes Wissen über fast alles, was mit Swift zu tun hat.Control vars/IBOutlets von einem ViewController in einem anderen ViewController

Im Moment entwickle ich eine App, die die ARSlidingPanel Bibliothek verwendet, so dass jetzt zwei ViewControllers auf dem Bildschirm vorhanden sind (Hauptansicht mit dem dunklen Hintergrund und Panelansicht, die den grünen Hintergrund darstellt). Ich möchte vars/Call-Funktionen von der Panel-Ansicht in die Hauptansicht einstellen können. Wenn ich zum Beispiel auf eine Schaltfläche in der Bedienfeldansicht klicke, möchte ich einen Text in der Hauptansicht anzeigen. Im Moment habe ich begonnen, statische Vars zu verwenden, aber von meinem Wissen über Java/Android weiß ich, dass dies wahrscheinlich nicht der richtige Weg ist. Irgendwelche Tipps für eine sauberere/akzeptablere Art, Dinge zu tun?

enter image description here

+0

Ich sehe 2 Lösungen, die einfachste ist eine schwache Referenz Ihres VC in Ihrer zweiten VC zu speichern ('schwache var mainVC: myVCClass!' In Ihrer zweiten VC-Klasse), legen Sie es einfach beim Erstellen der zweiten VC oder rufe das Segment an. Eine andere Lösung besteht darin, ein Delegiertenentwurfsmuster zu verwenden, das anspruchsvoller ist. –

+0

Können Sie in diesem Anwendungsfall das Delegierten-Designmuster etwas weiter erklären? – jaytj95

+1

Definieren Sie ein Protokoll wie 'Protokoll MainVCDelegate { \t func myButtontapped (Absender: UIButton) }' und speichern Sie einen Verweis auf die Stellvertretung in Ihrem MainVC 'var-Delegat: MainVCDelegate?' Und rufen Sie es auf, wenn es benötigt wird, wie wenn die Schaltfläche ist getapped 'self.delegate? .myButtontapped (sender)'. Die secondVC sollte sie 'class SecondVC: UIViewController, MainVCDelegate' erben und die View innerhalb der Delegate func Implementationen ändern, vergiss nicht' myMainVC.delegate = mySecondVC' zu setzen wenn du sie erstellst und du solltest gut gehen. –

Antwort

1

Es gibt ein paar verschiedene Möglichkeiten. Das erste, was Ihnen jedoch in den Sinn kommt, ist, ob Sie wirklich zwei unabhängige View-Controller für dieselbe Ansicht verwenden müssen.

  • Eine Lösung wäre Delegaten zu verwenden. Schreiben Sie ein schnelles Protokoll, das über die Methoden und Funktionen verfügt, die Sie bereitstellen möchten, z. B. das Einrichten von Werten in den Outlines des View-Controllers und die Implementierung des Protokolls in einem View-Controller. In Ihrem anderen View-Controller können Sie dann eine Delegatvariable vom Typ UIViewController -let delegate: UIViewController erstellen und diese Instanz Ihres Delegaten zum Ändern der Ansicht verwenden. Here's a guide on this
  • Noch besser ist, können Sie View-Controller als Unter View-Controller Ihrer Ansicht, Apple bietet ein gutes Stück der Dokumentation zu diesem Thema hinzufügen, können Sie find it here können.

Hoffe das hilft.

Verwandte Themen