[英]When is the parent/presenting view controller set on a modal view controller?
我提出了一個模態視圖控制器。 在這種模式視圖控制器的viewDidLoad
,我似乎無法找到父VC ....任何參考parentViewController
, presentingViewController
等。如果這還沒有設置,我怎么得到它的參考?
對於一般解決方案,您可以在第二個控制器中擁有自己的屬性,這是指向第一個視圖控制器的weak
指針。 第一個控制器應該在第一個segue的prepareForSegue
設置第二個控制器的屬性。
在回答您的問題時,僅在使用視圖控制器包含時(您沒有這樣做)設置parentViewController
。 該presentingViewController
當你設置presentViewController
,而是取決於第一視圖控制器是否嵌入導航控制器或不行為的變化(如果是嵌入式的,第二個視圖控制器的presentingViewController
是導航控制器,如果不是,它是查看控制器,你期望它是)。 並且看起來presentingViewController
沒有設置,如果你做的所有pushViewController
。
最重要的是,如果在第一個控制器的prepareForSegue
期間設置第二個控制器的自定義屬性,我發現它更加可靠和一致。
所以,在SecondViewController
,我有一個.h @interface
,看起來像:
@class FirstViewController;
@interface SecondViewController : UIViewController
@property (nonatomic, weak) FirstViewController *firstViewController;
@end
然后在第一個視圖控制器中,我有一個prepareForSegue
,看起來像:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"IdentifierForSegueToSecondControllerHere"])
{
SecondViewController *controller = segue.destinationViewController;
controller.firstViewController = self;
}
}
顯然,如果您使用故事板,則上述要點適用。 如果您正在使用NIB,您可以執行以下操作:
SecondViewController *controller = [[SecondViewController alloc] initWithNibName:nil bundle:nil];
controller.firstViewController = self;
[self presentViewController:controller animated:YES completion:nil];
無論如何,一旦你設置firstViewController
你的財產SecondViewController
,即SecondViewController
現在可以訪問屬性或調用的公共方法FirstViewController
,如:
// 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";
從概念上講,可以隨時加載視圖。 僅僅因為您的視圖已加載並不一定意味着它將以某種形式顯示。
您可以在viewWillAppear:
UIViewController
方法中找到您的呈現視圖控制器的最早點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.