2014-07-25 95 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]; 
相關問題