多维度高复用模板开发架构设计(二)
2016-05-18 本文已影响138人
bigParis
上回书多次提到了模板的构成
下面看下模板除了主场景还有什么其他的构成吧
那么如何把这个三个页面通过一个VC
管理
@interface MFTemplateBaseViewController : UIViewController
@property (nonatomic, strong) NSArray *scrollableViewControllers;
@end
这里给出整套框架最底层的一个VC:MFTemplateBaseViewController
, 调用方式是
MFTemplateBaseViewController *baseViewController = [[MFTemplateBaseViewController alloc] init];
MFChatRoomBoardController *leftController = [[MFChatRoomBoardController alloc] init];
id centerController = nil;
if ([[MFAppModel sharedObject].chatroomModelEx getRoomTemplateType] == kMFRoomTemplateTypeAppointment) {
centerController = [[MFAppointmentMainViewController alloc] init];
} else {
centerController = [[MFNormalMainViewController alloc] init];
}
MFChatRoomRightViewController *rightController = [[MFChatRoomRightViewController alloc] init];
baseViewController.scrollableViewControllers = @[leftController, centerController, rightController];
[MFAPP pushViewController:baseViewController animated:YES];
可以看到MFTemplateBaseViewController
将左中右, 以后可能更多个VC
作为自己的Child
for (int i = 0; i < self.scrollableViewControllers.count; ++i) {
UIViewController *controller = self.scrollableViewControllers[i];
if (controller && [controller respondsToSelector:@selector(setDelegate:)]) {
[controller performSelector:@selector(setDelegate:) withObject:self];
}
[scrollView addSubview:controller.view];
[self addChildViewController:controller];
}
MFTemplateBaseViewController
里通过这样的方式将Child
的View
用自己的scrollView
管理.
那MFTemplateBaseViewController
里面做什么, 做一些3个页面都需要的功能, 比如上面的标题栏, 背景图片等, 还有些3个页面共享的逻辑, 这里因为篇幅有限就不一一展示了, 大家可以自己脑补下.
MFTemplateBaseViewController
作为导航控制器push
和pop
的最终对象, 而不同的模板可以根据需要给MFTemplateBaseViewController
装载不同的scrollableViewControllers
, 比如左侧如果不是榜单页面, 介意吧leftController
换掉而不影响整体的架构.
好吧, 俗话说脱离业务谈架构都是扯淡, 这里我只是结合自己的业务谈谈模板开发的架构设计. 有疑问的可以私信我或者留言, 愿意接受大家的批评指教.