Ich präsentiere einen Modal View Controller. In diesem Modal-View-Controller viewDidLoad
, kann ich nicht scheinen, einen Verweis auf den übergeordneten VC zu finden .... parentViewController
, presentingViewController
, etc. Wenn dies noch nicht festgelegt ist, wie soll ich einen Verweis darauf erhalten?Wann ist der übergeordnete/präsentierende View-Controller auf einem Modal View-Controller eingestellt?
Antwort
Für eine allgemeine Lösung könnten Sie Ihre eigene Eigenschaft im zweiten Controller haben, der ein weak
Zeiger auf den ersten View-Controller ist. Der erste Controller sollte die Eigenschaft des zweiten Controllers im ersten Segment prepareForSegue
festlegen.
Als Antwort auf Ihre Frage, parentViewController
wird nur eingestellt, wenn View-Controller-Eindämmung verwenden (was Sie nicht tun). Die presentingViewController
wird festgelegt, wenn Sie presentViewController
tun, aber das Verhalten ändert sich abhängig davon, ob der erste View-Controller in einem Navigationscontroller eingebettet ist oder nicht (wenn es eingebettet ist, ist der presentingViewController
der Navigationscontroller, wenn nicht, ist es der View Controller, den Sie erwarten würden). Und es scheint, dass presentingViewController
nicht eingestellt ist, wenn Sie pushViewController
tun.
Fazit, ich finde es viel zuverlässiger und konsistenter, wenn Sie eine benutzerdefinierte Eigenschaft des zweiten Controllers während der prepareForSegue
in der ersten Controller festlegen.
Also, in der SecondViewController
, habe ich eine .h @interface
, die wie folgt aussieht:
@class FirstViewController;
@interface SecondViewController : UIViewController
@property (nonatomic, weak) FirstViewController *firstViewController;
@end
Und dann in der ersten View-Controller, ich prepareForSegue
haben, die wie folgt aussieht:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"IdentifierForSegueToSecondControllerHere"])
{
SecondViewController *controller = segue.destinationViewController;
controller.firstViewController = self;
}
}
Offensichtlich gilt dieser obige Punkt, wenn Sie Storyboards verwenden. Wenn Sie NIBs verwenden, würden Sie so etwas wie:
SecondViewController *controller = [[SecondViewController alloc] initWithNibName:nil bundle:nil];
controller.firstViewController = self;
[self presentViewController:controller animated:YES completion:nil];
Wie auch immer, wenn Sie festgelegt haben, dass firstViewController
Eigenschaft in Ihrem SecondViewController
, dass SecondViewController
jetzt können Eigenschaften zugreifen oder rufen öffentliche Methoden des FirstViewController
, wie :
// up at the top, where you have your import statements, include the following
#import "FirstViewController.h"
// then, in the @implementation of the SecondViewController, you can reference
// the first view controller and its properties, such as:
self.firstViewController.someStringProperty = @"some value";
Konzeptionell kann eine Ansicht jederzeit geladen werden. Nur weil Ihre Ansicht geladen wurde, heißt das nicht unbedingt, dass sie in irgendeiner Form angezeigt wird.
Der früheste Punkt, an dem Sie Ihren präsentierenden View-Controller erkennen können, ist in der viewWillAppear:
-Methode von UIViewController
.
- 1. iOS8 Modal ViewController Rotationsproblem
- 2. Control vars/IBOutlets von einem ViewController in einem anderen ViewController
- 3. Swift, Modal Segue und ViewController Ausgabe
- 4. Wie modal viewcontroller ohne Navigationscontroller zu lösen?
- 5. IOS FacebooSDK 3.0 FBLoginVIEW in modal viewController
- 6. Segue zu einem ViewController von nicht-Storyboard ViewController
- 7. iPhone - erlauben Landschaftsausrichtung auf nur einem viewcontroller
- 8. Wie mehrere Viewcontroller statt anfänglichen Viewcontroller
- 9. wie uicollectionview auf einem Viewcontroller mit schnellen
- 10. Run-Methode von Viewcontroller A auf B Viewcontroller
- 11. ViewController Übergangsbenachrichtigungen
- 12. iPad - Zeige Viewcontroller als Unteransicht vom angezeigten Modal View Controller
- 13. Wie man einen viewController in Cocos2d V3 modal oder präsentiert?
- 14. Ausblenden der Statusleiste auf einem einzelnen ViewController im Storyboard
- 15. iOS 5 Versucht, ViewController von Modal-Ansicht zu pushen
- 16. Benutzer kann scrollen, wenn Viewcontroller modal präsentiert wird
- 17. UIWebView in Multithread ViewController
- 18. iphone 2.x sdk - Verweis auf einen ViewController in einem anderen viewController zeigt sich als null
- 19. Präsens Viewcontroller auf andere programmatisch
- 20. erhalten UIView der Viewcontroller (iphone)
- 21. Kann festgestellt werden, ob ViewController als Modal dargestellt wird?
- 22. NavigationBar im Detail versteckt ViewController wenn modal präsentiert
- 23. iOS Modal ViewController mit transparentem BG und opakem Vordergrund
- 24. Wie aus einem anderen Viewcontroller in Swift
- 25. Keine neue ViewController-Instanz erstellen
- 26. Benutzerdefinierte ViewController-Eigenschaft
- 27. UINavigationController - same viewController
- 28. Aufrufmethode von einem anderen ViewController | Swift
- 29. Pass Viewcontroller als Parameter
- 30. CollectionView innerhalb ViewController
kurz gesagt, habe ich, dass 'presentingViewController' arbeitet (in storyboards, zumindest) gefunden, wenn die ersten view-Controller nicht in einer Navigationssteuerung eingebettet ist, aber wenn es ist, erhalten Sie die Navigationssteuerung. Sie können Spiele spielen, um zu versuchen, den logischen präsentierenden View-Controller zu finden, aber ich denke, es ist einfach viel besser, eine eigene Property in Ihrem präsentierten View-Controller zu haben, die der präsentierende View-Controller einstellt. – Rob