簡體   English   中英

何時在模態視圖控制器上設置父/呈現視圖控制器?

[英]When is the parent/presenting view controller set on a modal view controller?

我提出了一個模態視圖控制器。 在這種模式視圖控制器的viewDidLoad ,我似乎無法找到父VC ....任何參考parentViewControllerpresentingViewController等。如果這還沒有設置,我怎么得到它的參考?

對於一般解決方案,您可以在第二個控制器中擁有自己的屬性,這是指向第一個視圖控制器的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM