功能实现参考iOS 开发 iOS Developer

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

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 里通过这样的方式将ChildView用自己的scrollView管理.

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

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

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

上一篇下一篇

猜你喜欢

热点阅读