2014-07-25 150 views
0

当前设计从容器视图内的视图将视图推入导航堆栈?

目前,我有我的故事板具有嵌入标签控制器和嵌入式导航控制视图控制器。此视图控件还具有容器视图,该视图显示取决于位于导航栏中的分段控件中所选值的视图。

Storyboard View

为用于容器视图容器视图

的观点加载视图是XIB文件(未故事板为基础)和以编程加载:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    // First Controller 
    self.firstViewController = [[FirstViewController alloc] init]; 

    // Second Controller 
    self.secondViewController = [[SecondViewController alloc] init]; 

    // Add the controllers to an Array 
    self.controllers = @[self.firstViewController, self.secondViewController]; 

    // Set the container to show the first view controller on load 
    [self displayContentController:[self.controllers firstObject]]; 
} 

- (void)displayContentController:(UIViewController *)content 
{ 
    [self addChildViewController:content]; 
    content.view.frame = [self frameForContentController]; 
    [self.view addSubview:content.view]; 
    [content didMoveToParentViewController:self]; 

    // Set current controller 
    self.currentController = content; 
} 

存在的问题我面对

我遇到的问题是容器视图的其中一个视图是包含照片的集合视图,我需要能够在选择其中一个单元格时以大尺寸推送包含图像的视图。

如何在容器视图内的视图中将视图推送到导航控制器上?

回答

2

你的containerViewController嵌入在navigationController里面吗?

如果是这样,你可以简单地从内firstViewControllersecondViewController

,直到它达到UINavigationController(或子类)将向上穿越parentViewController链调用self.navigationController - 您需要调用 - 对navigationController pushViewController:animated:

事实上,对于自己的ContainerController,你也应该为UIViewController类别增加了一个简单的getter为您的容器:

@interface UIViewController (YourContainer) 

    - (YourContainer *)yourContainer; 

@end 

@implementation UIViewController (YourContainer) 

- (YourContainer *)yourContainer 
{ 
    if ([self isKindOfClass:[YourContainer class]]) { 
     return (YourContainer *)self; 
    }  

    UIViewController *parent = self.parentViewController; 

    while (! [parent isKindOfClass:[YourContainer class]] && parent != nil) { 
     parent = parent.parentViewController; 
    } 

    return (YourContainer *)parent; 
} 

@end 

这会给你childViewControllers相同的行为UINavigationControllerUITabBarController提供。事实上,如果你看看这些类的头文件,你会发现它们也通过UIViewController上的类别提供了这个功能 - 所以从现在开始,每个childViewController都可以调用self.yourContainer来获得对你的自定义容器的引用如果不包含在一个中,则为零。

+0

在一个容器视图视图内调用[self.navigationController pushViewController:singleImageController animated:YES]可以完美地工作。谢谢。 – ritch

+0

虽然我很好奇,但在这种情况下为UIViewController设置一个类别会有好处吗?我了解了一些类别,但我只在Objective C中进行了5周的编程。 – ritch

+0

那么,你不必创建一个类别。但我强烈建议您始终为您的自定义容器的孩子提供此功能。想象一下:子A从用户那里接收一个动作,要求你显示子B - 当然,显示子B的逻辑在你的容器类中,但是如何从子A获得对容器的引用来执行显示孩子B的动作? - 在这种情况下,UIViewcontroller类别是最好的方法 - 我希望这个例子不是太混乱;) – Cabus

0

history feedback item之前添加导航控制器,

要添加导航控制器,

1.Select您history feedback item控制器,

2.从'编辑>嵌入> NavigationController像下面图片:

enter image description here

现在呦你的单元格/照片选择方法使用

[self.navigationController pushViewController:YourUIViewController animated:YES]; 
相关问题