Ich habe viele Anmerkungen in einer Kartenansicht (mit rightCalloutAccessory
Schaltflächen). Die Schaltfläche führt einen Übergang von hier mapview
zu a durch tableview
. Ich möchte tableview
ein anderes Objekt (das Daten enthält) übergeben, je nachdem, auf welche Callout-Schaltfläche geklickt wurde.
Zum Beispiel: (komplett erfunden)
- annotation1 (Austin) -> Daten übergeben obj 1 (relevant für Austin)
- annotation2 (Dallas) -> Daten übergeben obj 2 (relevant für Dallas)
- annotation3 (Houston) -> Daten übergeben obj 3 und so weiter ... (Sie haben die Idee)
Ich kann erkennen, auf welche Callout-Schaltfläche geklickt wurde.
Ich benutze prepareForSegue
: um das Datenobjekt an das Ziel zu übergeben ViewController
. Da ich diesen Aufruf nicht ausführen kann, um ein zusätzliches Argument für das von mir benötigte Datenobjekt zu verwenden, was sind einige elegante Möglichkeiten, um den gleichen Effekt zu erzielen (dynamisches Datenobjekt)?
Jeder Tipp wäre dankbar.
ios
xcode
uitableview
mapkit
storyboard
chizzle
quelle
quelle
Antworten:
Nehmen Sie einfach einen Verweis auf den Zielansichts-Controller in der
prepareForSegue:
Methode und übergeben Sie alle benötigten Objekte an diese. Hier ist ein Beispiel ...REVISION: Sie können auch die
performSegueWithIdentifier:sender:
Methode verwenden, um den Übergang zu einer neuen Ansicht basierend auf einer Auswahl oder einem Tastendruck zu aktivieren.Stellen Sie sich zum Beispiel vor, ich hätte zwei View-Controller. Die erste enthält drei Tasten und die zweite muss wissen, welche dieser Tasten vor dem Übergang gedrückt wurde. Sie können die Schaltflächen mit einer
IBAction
in Ihrem Code verbundenenperformSegueWithIdentifier:
Methode verbinden, die eine Methode wie diese verwendet ...BEARBEITEN: Die Demo-Anwendung, die ich ursprünglich angehängt habe, ist jetzt sechs Jahre alt, daher habe ich sie entfernt, um Verwirrung zu vermeiden.
quelle
[vc setMyObjectHere:object];
dies dynamisch einstellen . dh obj1 für button1, obj2 für button2 Das Problem ist, dass ich kein Argument weitergeben kann. Gibt es einen Weg, dies zu umgehen?Manchmal ist es hilfreich zu vermeiden, dass eine Abhängigkeit zur Kompilierungszeit zwischen zwei Ansichtscontrollern erstellt wird. So können Sie dies tun, ohne sich um den Typ des Zielansichts-Controllers zu kümmern:
Solange Ihr Controller für die Zielansicht eine öffentliche Eigenschaft deklariert, z.
Sie können diese Eigenschaft im vorherigen Ansichts-Controller wie oben beschrieben festlegen.
quelle
setMyData:
. Das ist eine Abhängigkeit. Die Tatsache, dass Sie einen Selektor verwenden, um den Kompilierungsfehler zu vermeiden, sollte als Schwäche Ihres Ansatzes und nicht als Vorteil betrachtet werden. Es ist schockierend für mich, wie viele Entwickler das Konzept verloren haben, dass Kompilierungszeitfehler Laufzeitfehlern vorgezogen werden sollten.In Swift 4.2 würde ich so etwas machen:
quelle
Ich habe einen Sender Klasse , wie diese
Ich benutze diese Absenderklasse zum Übergeben von Objekten an
prepareForSeque:sender:
quelle
prepareForSegue
oder wir sind die Umsetzung sie und die Annahme ist , prepareForSegue selbst wir also aufgerufen wird , nicht benötigen , wie etwas zu tun[self prepareForSegue]
Ich bin auf diese Frage gestoßen, als ich versuchte zu lernen, wie Daten von einem View Controller an einen anderen übergeben werden. Ich brauche jedoch etwas Visuelles, um lernen zu können, daher ist diese Antwort eine Ergänzung zu den anderen, die bereits hier sind. Es ist etwas allgemeiner als die ursprüngliche Frage, kann aber an die Arbeit angepasst werden.
Dieses grundlegende Beispiel funktioniert folgendermaßen:
Die Idee ist, eine Zeichenfolge aus dem Textfeld im First View Controller an die Beschriftung im Second View Controller zu übergeben.
First View Controller
Second View Controller
Erinnere dich an
UITextField
und dieUILabel
.Quelle
So senden Sie Daten über segue (schnell) (YouTube-Tutorial)
Siehe auch
View Controller: Daten weiterleiten und Daten zurückgeben (ausführlichere Antwort)
quelle
Für Swift verwenden Sie dies,
quelle
Ich habe eine Bibliothek mit einer Kategorie in UIViewController implementiert, die diesen Vorgang vereinfacht. Grundsätzlich legen Sie die Parameter fest, die Sie in einem NSDictionary übergeben möchten, das dem UI-Element zugeordnet ist, das die Übergabe ausführt. Es funktioniert auch mit manuellen Segues.
Zum Beispiel können Sie tun
für einen manuellen Übergang oder erstellen Sie eine Schaltfläche mit einem Übergang und verwenden Sie
Wenn der Zielansichts-Controller für einen Schlüssel nicht mit der Schlüsselwertcodierung kompatibel ist, geschieht nichts. Es funktioniert auch mit Schlüsselwerten (nützlich zum Abwickeln von Segues). Überprüfen Sie es hier https://github.com/stefanomondino/SMQuickSegue
quelle
Meine Lösung ist ähnlich.
quelle
Verwenden Sie einfach diese Funktion.
quelle
Ich habe diese Lösung verwendet, um den Aufruf des Segues und die Datenkommunikation in derselben Funktion zu halten:
Ein Anwendungsfall wäre etwa:
Dies scheint für mich zu funktionieren, ich bin jedoch nicht 100% sicher, dass die Funktionen zum Ausführen und Vorbereiten immer auf demselben Thread ausgeführt werden.
quelle