-1

Ich habe UINavigationController und es ist Stammansicht UICollectionViewController ist, Jedes Mal, wenn ich in diesem UICollectionViewController auf Zelle tippen schiebt eine weitere UICollectionViewController die eine UITextFiled Das Problem ist, wenn Ich gehe zurück auf die Wurzel und tippen Sie auf die gleiche Zelle, es wird GESAMT NEW anzeigen, und UITextField ist leer.UINavigationController Push-Ansicht laden Jedes Mal

die Sache, die ich möchte, ist ähnlich wie WhatsApp oder andere Chat-Anwendungen, wenn geöffnet Chat Konversation und etwas eingeben und zurück zum gleichen Chat Konversation das UITextField wird den Text, den ich geschrieben habe.

EDIT: dies der Code, den ich verwenden, um den Controller zu drücken:

let nextView = self.storyboard!.instantiateViewControllerWithIdentifier("nextView") as! nextViewController 
    self.navigationController!.pushViewController(nextView, animated: true) 

Kann ich verhindern, dass die UINavigationController Von Pop-up-Ansicht, und halten Sie sie geladen?

+0

Sie beschreiben im Grunde das Verhalten eines normalen Nav-Controllers. Sobald eine Ansicht vom Stapel entfernt wurde, wird der Speicher neu zugewiesen und die Ansicht ist vollständig verschwunden. Wenn Sie beim erneuten Antippen Daten wiederherstellen möchten, müssen Sie einen Weg finden, diese Daten an Ihren neuen View-Controller weiterzuleiten. Um eine bessere Antwort zu erhalten, fügen Sie Code hinzu, der zeigt, wie Sie Ihre Ansicht initialisieren und was Sie benötigen. Andernfalls ist Ihre Frage möglicherweise zu unklar, um gute Antworten zu erhalten. –

+0

Sie müssen Protokoll oder Benachrichtigung in Pushed-View-Controller implementieren und bevor Sie Call-Delegat –

+0

knallen Ich habe meine Frage aktualisiert, kann ich verhindern, dass die UINavigationController From die Ansicht, und halten Sie es geladen? –

Antwort

0

Benutzerprotokolle, um Daten von der zweiten Ansicht zur ersten Ansicht zu übertragen. Der folgende Link wird Ihnen helfen und mit dem Protokoll können Sie den Wert übergeben und wie angegeben anzeigen.

Do als

override func viewWillDisappear(animated: Bool) { 
    super.viewWillDisappear(animated) 
    if self.isBeingDismissed() { 
     self.delegate?.acceptData(textFieldOutlet.text) 
    } 
} 

https://www.codebeaulieu.com/36/Passing-data-with-the-protocol-delegate-pattern

Diese Delegation ist die richtige Art und Weise Wert aus dem zweiten Controller zum ersten Controller zu übergeben.

Noch eine Sache, müssen Sie Ihre View-Controller Architektur betrachten. Wie es am besten für eine Art von Chat sein sollte, sind Sie machen.

Danke.

+0

danke für deine antwort, aber ist da eh die ladung geladen? –

+0

Sie können auch Datenbank- und Abrufdaten verwenden. Denken Sie darüber nach. @HaidarMahmoud –

+0

Nein, Sie können es nicht geladen halten, sobald Sie Pop, View Controller verliert alles, müssen Sie Daten irgendwo speichern: userdefault, plist, Core-Daten oder Sqlite. –

0

Verwenden Sie lokale Datenbank, um nicht gespeicherte Daten zu speichern. In der Ansicht für die Chat-Ansicht angezeigt prüfen, ob nicht gespeicherte Daten für diesen bestimmten Benutzer vorhanden sind, wenn dieser Fall dann in der Textbox hinzufügen.

0

Dies ist das Standard- oder Normalverhalten von UINavigationController. Wenn Sie eine ViewController pop dann wird es aus dem Navigationsstapel und Ihrem ViewControllerdeallocate aus dem Speicher entfernt.

Also, wenn Sie erreichen möchten, Textfield Text wie erwähnt zu halten, dann sollten Sie es irgendwo speichern. Sie können in NSUserDefaults und für denselben Schlüssel speichern. Dann check-in viewDidload jedes Mal, wenn es Text gibt dann in Textfeld und alle viewDidDisappearuserdefault wieder mit neuen Edit und wenn Textfield ist leer, dann leere Zeichenfolge festlegen.

Zweitens können Sie Delegate und Protokolle verwenden, um Daten zurück zur vorherigen Klasse zu senden und erneut an diese Klasse oder VC zu senden und es anzuzeigen !!

Sie können dieses Zeug so etwas wie mit dieser Art von Lösung verwalten!