0

現在の設計

現在、ストーリーボードにビュー コントローラーがあり、タブ コントローラーとナビゲーション コントロールが埋め込まれています。このビュー コントロールには、ナビゲーション バーにあるセグメント化されたコントロールで選択された値に依存するビューを表示するコンテナー ビューもあります。

ストーリーボード ビュー

コンテナー ビューのビューの読み込み

コンテナー ビューのビューは 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;
}

私が直面している問題

私が抱えている問題は、コンテナー ビューのビューの 1 つが写真を含むコレクション ビューであり、セルの 1 つを選択したときに大きなサイズの画像を含むビューをプッシュできるようにする必要があることです。

コンテナ ビュー内のビューでビューをナビゲーション コントローラにプッシュするにはどうすればよいですか?

4

2 に答える 2

2

containerViewController は navigationController 内に埋め込まれていますか?

もしそうなら、あなたは単にself.navigationController内部から呼び出すことができfirstViewControllerますsecondViewController

parentViewController(またはサブクラス)に到達するまでチェーンを上向きにトラバースし、そのnavigationControllerでUINavigationController呼び出します。pushViewController:animated:

UIViewController実際、独自の containerController には、コンテナに単純な 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

UINavigationControllerこれにより、childViewControllers に対して提供するのと同じ動作が得られますUITabBarController。実際、これらのクラスのヘッダーを見ると、これらのクラスもカテゴリを通じてこの機能を提供していることがわかります。つまり、UIViewController今後は、すべての childViewController を呼び出しself.yourContainerて、カスタム コンテナーへの参照を取得できます。 1 つに含まれていない場合は nil。

于 2014-07-25T10:03:25.710 に答える