![](/img/trans.png)
[英]Pushing a view controller onto a navigation controller from a tab bar button
[英]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
從內部firstViewController
或secondViewController
它將向上遍歷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
這將為您提供與UINavigationController
和UITabBarController
提供的相同的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.