我正在开发一个由多个人开发的许多区域的ios应用程序。我们想要一个实例化视图控制器的简单,标准的范例(通常来自应用程序的其他区域),例如:
MyViewController *myVC = [[MyViewController alloc] init];
但是,我们希望能够在Storyboard中定义ViewController的功能,其中每个区域可能都有一个或多个Storyboard。我们如何拥有不需要UIViewControllers来了解情节提要的细节的代码?
可以进行以下工作吗? (在MyViewController.m中)
- (instancetype)init
{
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MyViewControllerStoryboard" bundle:nil];
return [storyboard instantiateViewControllerWithIdentifier:@"MyViewController"];
}
还是上述情况会导致内存泄漏和/或其他讨厌的副作用?
最佳答案
对于您的视图控制器的每种特殊情况,具有工厂方法的类别怎么样?
例:
您具有MyViewControlle.h
和MyViewController.m
以及MyViewControllerStoryboard.storyboard
。您可以创建具有以下内容的MyViewController+FactoryMethods.h
和MyViewController+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文件与工厂方法保持干净。而且方法非常灵活,因为团队中的任何人都可以使用自定义工厂方法轻松扩展类别。另外,每个人都应该迅速习惯于寻找控制器实例化的工厂方法。
关于ios - 如何隐藏从 Storyboard 中初始化ViewController的方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24784492/