多维度高复用模板开发架构设计(二)

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

左边榜单
右侧活动信息展示

那么如何把这个三个页面通过一个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 里通过这样的方式将ChildView用自己的scrollView管理.

MFTemplateBaseViewController里面做什么, 做一些3个页面都需要的功能, 比如上面的标题栏, 背景图片等, 还有些3个页面共享的逻辑, 这里因为篇幅有限就不一一展示了, 大家可以自己脑补下.

MFTemplateBaseViewController作为导航控制器pushpop的最终对象, 而不同的模板可以根据需要给MFTemplateBaseViewController装载不同的scrollableViewControllers, 比如左侧如果不是榜单页面, 介意吧leftController换掉而不影响整体的架构.

好吧, 俗话说脱离业务谈架构都是扯淡, 这里我只是结合自己的业务谈谈模板开发的架构设计. 有疑问的可以私信我或者留言, 愿意接受大家的批评指教.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,446评论 25 708
  • iOS网络架构讨论梳理整理中。。。 其实如果没有APIManager这一层是没法使用delegate的,毕竟多个单...
    yhtang阅读 5,252评论 1 23
  • 前言 看了下上篇博客的发表时间到这篇博客,竟然过了11个月,罪过,罪过。这一年时间也是够折腾的,年初离职跳槽到鹅厂...
    西木柚子阅读 21,297评论 12 184
  • 我们要开发一个类似皮肤的功能, 但又有一些模板相关的逻辑. 以上面这个东西为例, 整体上相亲模板依赖大部分普通模板...
    bigParis阅读 707评论 0 3
  • 简介 学校给了两周时间,让我们做一个课设.于是我打算做一个移动端的校园图书馆软件.计划用vue.js这个框架.今天...
    小貔阅读 993评论 0 0