簡體   English   中英

將視圖從容器視圖內的視圖推到導航堆棧上?

[英]Pushing a view onto the Navigation Stack from a view inside a container 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;
}

我面臨的問題

我的問題是容器視圖的視圖之一是包含照片的集合視圖,當他們選擇其中一個單元格時,我需要能夠推動包含大尺寸圖像的視圖。

如何將視圖推入容器視圖內的視圖中的導航控制器上?

您的containerViewController是否嵌入在navigationController中?

如果是這樣,你可以簡單地調用self.navigationController從內部firstViewControllersecondViewController

它將向上遍歷parentViewController鏈,直到到達UINavigationController (或子類)-然后您將在該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

這將為您提供與UINavigationControllerUITabBarController提供的相同的childViewControllers行為。 實際上,如果您查看這些類的標頭,就會發現它們也通過UIViewController上的類別提供了此功能-因此,從現在開始,每個childViewController都可以調用self.yourContainer來獲取對您的引用自定義容器,如果不包含在一個容器中,則為nil。

在您的history feedback item之前添加導航控制器,

要添加導航控制器,

1.選擇您的history feedback item控制器,

2.從`Editor> Embed In> NavigationController如下圖所示:

在此處輸入圖片說明

現在在您的單元格/照片選擇方法中使用

[self.navigationController pushViewController:YourUIViewController  animated:YES];

暫無
暫無

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

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