gpt4 book ai didi

ios - 如何隐藏正在从 Storyboard 中初始化的 ViewController?

转载 作者:行者123 更新时间:2023-11-29 02:48:52 26 4
gpt4 key购买 nike

我正在开发一款 iOS 应用程序,其中包含由多人开发的多个领域。我们想要一个简单的标准范例来实例化 View Controller (通常来自应用程序的其他区域),例如:

MyViewController *myVC = [[MyViewController alloc] init];

但是,我们希望能够在 Storyboard 中定义我们的 ViewController,其中每个区域都可以有一个或多个 Storyboard。我们怎样才能让初始化 UIViewController 的代码不需要知道 Storyboard的细节?

像下面这样的东西行得通吗? (在 MyViewController.m 中)

- (instancetype)init
{
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MyViewControllerStoryboard" bundle:nil];
return [storyboard instantiateViewControllerWithIdentifier:@"MyViewController"];
}

或者上述会导致内存泄漏和/或其他讨厌的副作用吗?

最佳答案

对于 View Controller 的每个特殊情况,有一个具有工厂方法的类别怎么样?

示例:

您有 MyViewControlle.hMyViewController.m 以及 MyViewControllerStoryboard.storyboard。您可以创建包含以下内容的 MyViewController+FactoryMethods.hMyViewController+FactoryMethods.m 文件:

MyViewController+FactoryMethods.h

@interface MyViewController (FactoryMethods)

+ (instancetype)createDefaultViewController();

@end

MyViewController+FactoryMethods.m

#import "MyViewController+FactoryMethods.h"
@implementatiion MyViewController (FactoryMethods)

+ (instancetype)createDefaultViewController() {
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MyViewControllerStoryboard" bundle:nil];
return [storyboard instantiateViewControllerWithIdentifier:@"MyViewController"];
}

@end

用法:

#import "MyViewController+FactoryMethods.h"

@implementation SomeClass

- (void)method {
MyViewController *mvc = [MyViewController createDefaultViewController];
}

@end

通过这种方法,您将保持 MyViewController 文件不受工厂方法的影响。而且方法非常灵活,因为团队中的任何人都可以使用自定义工厂方法轻松扩展类别。此外,每个人都应该很快习惯寻找 Controller 实例化的工厂方法。

关于ios - 如何隐藏正在从 Storyboard 中初始化的 ViewController?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24784492/

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