3 Stimmen

IOS - Zugriff auf die Elterneigenschaft des Modals

Ich kompliziere das wahrscheinlich zu sehr, aber gibt es eine Möglichkeit, auf eine Eigenschaft des Elternelements eines Modals zuzugreifen?

Also, ich rufe "presentModalViewController" auf und dann kann ich auf einige Eigenschaften des Ansichtscontrollers zugreifen, der es gerade aufgerufen hat, vom Modal.

Danke, Ashley

4voto

fengd Punkte 7501

Wenn Sie iOS 5 verwenden, können Sie self.presentingViewController aufrufen, um auf den übergeordneten Ansichtscontroller zuzugreifen

hier ist Apple-Referenz

2voto

jrturton Punkte 115612

Ihre Antwort war fast richtig - Sie wollen presentingViewController anstelle von parentViewController, aber dies könnte zu einer engen Kopplung führen (Abhängigkeit zwischen den beiden Klassen, was bedeutet, dass sie nur miteinander arbeiten können), wenn Sie nicht vorsichtig sind.

Es ist am besten, immer noch ein Protokoll zu definieren, aber Ihre Delegat-Eigenschaft ist nicht erforderlich - sie wird den gleichen Wert wie die presentingViewController-Eigenschaft haben.

1voto

Ashley Staggs Punkte 1547

Ok, also seitdem ich diese Frage gestellt habe, habe ich ein paar Techniken ausprobiert, die aussahen, als ob sie funktionieren würden, aber nicht.

Ein solches Beispiel ist dies.

((pController *)self.parentViewController).testString;

Allerdings war es ein regulärer UIViewController, der das Modal präsentierte, der übergeordnete Controller war tatsächlich ein UITabBarController, und selbst die Verwendung von selectedViewController hat nicht funktioniert.

Meine Lösung bestand darin, meiner Modal-.h Datei hinzuzufügen

id delegate;

und

@property (nonatomic, assign) id delegate;

Nachdem ich es in der Implementierungsdatei synthetisiert hatte, habe ich das ModalViewController allokiert/initialisiert, aber kurz bevor ich es präsentiere, setze ich

modalViewController.delegate = self;

Auf diese Weise konnte ich self.delegate innerhalb meines Modals aufrufen. Das reichte immer noch nicht aus, da dadurch nicht gesagt wird, welcher View-Controller es ist, also konnte ich nicht sagen

self.delegate.testString;

Aber das Casting, das ich zuvor gelernt habe, hat mir geholfen, eine vollständig funktionierende Lösung zu bekommen von

((pController *)self.delegate).testString;

Ich hoffe, ich habe mich nicht einfach nur durch diese Erklärung durchgelabert, und ich hoffe, dass dies jemandem in der Zukunft helfen kann.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X