gpt4 book ai didi

ios - 创建 UIView 的实例 - iOS

转载 作者:行者123 更新时间:2023-11-28 19:50:57 27 4
gpt4 key购买 nike

我正在设计一个 iOS 应用,其中包含 10 个主要的 UIViewController。每个代表应用程序的不同部分。它基本上是一家公司,并显示有关该公司的信息。

我在应用程序的底部(在所有不同的 View Controller 中)做的一件事是显示一个包含 map 的 UIView。这张 map 显示了某个位置。

现在它可以工作了,但我遇到的问题是我有 10 个相同代码的副本和 10 个相同 UIView 的副本。

无论如何,我是否可以制作一个小型 View Controller ,并附加一个类来处理 map ,然后在我的应用程序的所有 10 个 View Controller 中创建一个 View Controller 实例?

我希望我的问题是有道理的。基本上我想知道如何在我的所有 10 个 ViewController 中重用一个 UIView。所以我可以调用它或其他东西,它就会出现。

更新 - 这基本上就是我想要实现的目标

enter image description here

谢谢,丹。

最佳答案

View Controller 可以包含其他 View Controller 。您可以在 Storyboard中使用容器 View 或以编程方式设置关系(请参阅:Creating Custom Container View Controllers)。

Storyboard容器 View 最简单,但编程解决方案也不错。

- (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];
}

最后注意:让每个父 View 创建自己的 map View Controller 实例。抵制在父级之间重用 map View Controller 实例的诱惑。


更新以解决问题

So lets say I had 2 of the same view controllers open at once and they both were displaying the same imported viewcontroller then it wouldn't work right?

你不能这样做。 View Controller 的实例只能有 1 个父 View Controller 。为每次使用创建单独的实例。

So if I create different instances, I can reuse the same view lets say 5 times in one view?

是的,如果您创建不同的实例,您可以在一个 View 上放置任意数量的实例。

让我明确一点,实例是使用构造函数创建的不同内存位置。

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"];

更新以演示解除容器 View Controller 。


这是一个 subview Controller 的方法,因此它可以用来关闭自己。

- (void)dismissFromParentViewController
{
[self willMoveToParentViewController:nil];
[self.view removeFromSuperview];
[self removeFromParentViewController];
}

关于ios - 创建 UIView 的实例 - iOS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29253151/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com