上回书多次提到了模板的构成
下面看下模板除了主场景还有什么其他的构成吧

左边榜单

右侧活动信息展示
那么如何把这个三个页面通过一个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换掉而不影响整体的架构.
好吧, 俗话说脱离业务谈架构都是扯淡, 这里我只是结合自己的业务谈谈模板开发的架构设计. 有疑问的可以私信我或者留言, 愿意接受大家的批评指教.
