視圖控制器可以包含其他視圖控制器。您可以在故事板中使用容器視圖或以編程方式設置關係(請參閱:Creating Custom Container View Controllers)。
故事板容器視圖是最簡單的,但程序化的解決方案不是太糟糕。
- (void)displayContentController:(UIViewController *)content
{
[self addChildViewController:content];
content.view.frame = [self frameForContentController];
// NOTE: You could also add it to any subview of self.view.
[self.view addSubview:content.view];
[content didMoveToParentViewController:self];
}
- (CGRect)frameForContentController
{
return CGRectMake(…);
}
- (void)viewDidLoad
{
…
MyMapViewController *mapViewController = …;
[self displayContentController:mapViewController];
…
}
- (void)dismissContentController:(UIViewController *)content
{
[content willMoveToParentViewController:nil];
[content.view removeFromSuperview];
[content removeFromParentViewController];
}
最後請注意:讓每個父視圖創建自己的地圖視圖控制器的實例。抵制在家長之間重複使用地圖視圖控制器實例的誘惑。
更新來解決問題
因此,可以說我在曾經有過同樣的看法控制器開放的2,他們兩人都顯示相同的進口視圖 - 控制那就不是工作的權利?
你不能這樣做。視圖控制器的一個實例只能有一個父視圖控制器。爲每個用途創建單獨的實例。
因此,如果我創建不同的實例,我可以重複使用相同的視圖可以說5次在一個視圖?
是的,如果你創建不同的實例,你可以在視圖中放置儘可能多的實例。
讓我明白,一個實例是使用構造函數創建的獨特內存位置。
MyMapViewController *mapViewController1 = [[MyMapViewController alloc] initWithNibName:@"MyMapViewController" bundle:nil];
MyMapViewController *mapViewController2 = [[MyMapViewController alloc] initWithNibName:@"MyMapViewController" bundle:nil];
或
MyMapViewController *mapViewController1 = [self.storyboard instantiateViewControllerWithIdentifier:@"MapViewController"];
MyMapViewController *mapViewController2 = [self.storyboard instantiateViewControllerWithIdentifier:@"MapViewController"];
更新證明駁回的容器視圖控制器。
這是一個子視圖控制器的方法,所以它可以用來消除它自己。
- (void)dismissFromParentViewController
{
[self willMoveToParentViewController:nil];
[self.view removeFromSuperview];
[self removeFromParentViewController];
}
非常感謝傑夫。真的很有幫助。只有一個問題,但這隻能在一個時間正確的嗎?所以你不能同時創建一個ViewController的多個實例。是對的嗎?所以我們可以說我有兩個相同的視圖控制器一次打開,他們都顯示相同的導入視圖控制器,那麼它不會正常工作? – Supertecnoboff 2015-03-25 12:14:18
@Supertecnoboff,只要一個'view'只有一個'superview',你需要創建不同的實例,或者你可以將當前實例移動到你的可見容器中作爲'subview'。 – holex 2015-03-25 12:30:51
有趣。因此,如果我創建不同的實例,我可以重複使用同一個視圖,可以在一個視圖中說5次?並且通過不同的實例,我正確地說,你只是意味着創建另一個新的指向視圖控制器的指針,如:'''MyMapViewController * mapViewController = ...;然後MyMapViewController * mapViewController_2 = ...; ''' – Supertecnoboff 2015-03-25 12:34:04