如果中间有容器视图,如何访问父视图控制器?

时间:2014-03-20 10:01:07

标签: ios uiviewcontroller storyboard

如何从最右边的VC(黑色)访问Tab VC?我尝试使用它的parentViewController但是没有。

enter image description here

2 个答案:

答案 0 :(得分:1)

我不是容器的忠实粉丝,他们确实减慢了XCode中的故事板管理速度。

您应该能够通过将具有公共IBOutlet的简单视图中的所有容器转换为某种类型的BaseViewController来实现相同的结果(您应该始终在类中扩展自定义BaseViewController而不是UIViewController,它为您提供了更多的灵活性功能。也许你已经在做了:))。

然后你可以用这样的执行方法创建一个自定义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];
}

为父视图控制器绘制一个手动segue到"包含"查看控制器给它一个公共标识符(类似" containerSegue")。

然后在每个视图容器视图控制器viewDidLoad方法中添加:

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

你应该和以前一样。 唯一的区别是您可以通过为目标视图控制器添加自定义属性和配置来调整CustomSegue。而且,多亏了addChildViewController,您的子VC现在应该有一个parentViewController。

而且,最重要的是,你的故事板应该在XCode中加载更加顺畅和快速。

答案 1 :(得分:0)

在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