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

标签 ios objective-c uiviewcontroller uistoryboard

我正在开发一款 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/

相关文章:

ios - 谷歌地图 sdk ios Api 错误

ios - DeepEnd(cydia 调整)类似于 iOS 的 3D 背景

ios - 缩小 UIImage 可以吗?

iphone - UIWebView 中的异步 HTTP 请求真的会产生新线程吗?

objective-c - 在 Swift 2.1 中使用在 Objective C 中声明为 block 的闭包 Swift

ios - 推送通知不支持现有的应用程序 ID?

ios - 从另一个类重新加载核心数据 TableView

iOS 自动布局 : get width of views inside a view in ViewController

ios - 实现复杂的自定义 View Controller 的正确方法是什么

iphone - 如何在 didReceiveRemoteNotification 中推送新的 View Controller ,以便之前的 View Controller 暂时不显示?