簡體   English   中英

如果它們之間有容器視圖,如何訪問父視圖控制器?

[英]How to access parent view controller if there is container view inbetween?

如何從最右邊的VC(黑色)訪問Tab VC? 我試圖從中使用parentViewController,但沒有成功。

在此處輸入圖片說明

我不是Container的忠實擁護者,它們確實減慢了XCode中的故事板管理。

通過將具有通用IBOutlet的簡單視圖中的所有容器都轉換為某種BaseViewController,您應該能夠實現相同的結果(您應該始終在類中擴展自定義BaseViewController而不是UIViewController,它為通用功能提供了更大的靈活性。你已經在做:))。

然后,您可以使用perform方法創建自定義segue類

-(void) perform {
    BaseViewController* source = (BaseViewController*) self.sourceViewController;
    UIViewController* destination = self.destinationViewController
    [source.containerView addSubview:destination];
    [source addChildViewController:destination];

    //Custom code for properly center the destination view in the container. 
    //I usually use FLKAutolayout for autolayout projects with something like this
    //[destination.view alignToView:source.view];
}

為“父級”視圖控制器繪制一個手動選擇到“包含”的視圖控制器,並為其指定一個通用標識符(類似於“ containerSegue”)。

然后在每個視圖容器的視圖控制器中的viewDidLoad方法中添加:

[self performSegueWithIdentifier:@"containerSegue" sender:self];

並且您應該處於與以前相同的狀態。 唯一的區別是您可以通過添加目標視圖控制器的自定義屬性和配置來調整CustomSegue。 並且,感謝addChildViewController,您的子VC現在應該有一個parentViewController。

而且,最重要的是,您的情節提要板應該真正更平滑,更快地加載到XCode中。

在rootViewController中嘗試一下,

rootViewController.h
@interface rootViewController: UIViewController

{
}

+ (UIViewController *) sharedRootViewController;
@end
rootViewController.m
@import "rootViewController.h"

@implementation rootViewController

+ (UIViewController *) sharedRootViewController
{
    return (UIViewController *)((UIWindow *)[[[UIApplication sharedApplication] windows] objectAtIndex:0]).rootViewController;
}

- (void) viewDidLoad
{
}

.
.
.
@end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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