Latest 0.0.7
Homepage https://github.com/lovemo/MVVMFramework
License MIT
Platforms ios 7.0, requires ARC
Frameworks CoreFoundation, Foundation, CoreGraphics, UIKit
Authors

Swift版本地址:https://github.com/lovemo/MVVMFramework-Swift

本项目交流群:474292335

欢迎有兴趣的有好的想法的参与到项目中来

====

具体实现思路,请参看博客:

博客:浅谈MVVM

地址:点击链接进入

====
再看了几篇博客后,总结整理下一个快速开发MVVM框架(抛砖引玉),分离控制器代码,降低代码耦合

终于再也不用为ViewController中一坨坨tableView和collectionView的烦人代码忧虑了

代码加入了cell自适应高度,自动缓存网络请求至sqlite数据库,运行时自动布局UILabel,配合MJExtension,MJRefresh,AFNetworking等常用开发框架使用更佳,主要用于分离控制器中的代码,降低代码耦合程度,可以根据自己使用习惯调整代码。欢迎来喷,提issues。

====

使用用法

CocoaPods:

    pod 'SUIMVVMKit'

====

思维流程图示

image
image

现在的工程代码结构

image

模块构建


结构分析


代码示例

一句代码集成展示tableView,cell自适应高度,下拉刷新

      self.table.tableHander = [[MVVMTableDataDelegate alloc]initWithViewModel:[[BQViewModel alloc]init]
                                        cellIdentifiersArray:@[MyCellIdentifier]
                                        didSelectBlock:^(NSIndexPath *indexPath, id item) {

                                        SecondVC *vc = (SecondVC *)[UIViewController viewControllerWithStoryBoardName:@"Main" identifier:@"SecondVCID"];
                                        [weakSelf.navigationController pushViewController:vc animated:YES];
                                        NSLog(@"click row : %@",@(indexPath.row)) ;
                                        }];

一句代码集成展示collectionView

     self.collectionView.collectionHander = [[MVVMCollectionDataDelegate alloc]initWithViewModel:[[BQViewModel2 alloc]init]
                                            cellIdentifier:MyCellIdentifier
                                            collectionViewLayout:nil cellItemSizeBlock:^CGSize {
                                                return CGSizeMake(110, 120);
                                            } cellItemMarginBlock:^UIEdgeInsets {
                                                return UIEdgeInsetsMake(0, 20, 0, 20);
                                            } didSelectBlock:^(NSIndexPath *indexPath, id item) {
                                             NSString *strMsg = [NSString stringWithFormat:@"click row : %zd",indexPath.row];
                                             [[[UIAlertView alloc] initWithTitle:@"提示"
                                                                   message:strMsg
                                                                   delegate:self
                                                                   cancelButtonTitle:@"好的"
                                                                   otherButtonTitles:nil, nil] show];
                                              }];

一句代码实现网络请求,自动缓存网络请求数据

    NSString *url = @"http://news-at.zhihu.com/api/4/news/latest";
    [MVVMHttp get:url params:nil cachePolicy:MVVMHttpReturnCacheDataThenLoad success:^(id responseObj) {

        NSArray *array = responseObj[@"stories"];
        self.dataArrayList = [ThirdModel mj_objectArrayWithKeyValuesArray:array];
        if (successHandler) {
            successHandler();
        }

    } failure:^(NSError *error) {

    }];

几行代码实现数据存储

    static NSString *tableName = @"arrarList";
    MVVMStore *store = [MVVMStore sharedStore];
    [store db_initWithDBName:@"demo.sqlite" tableName:tableName];
    [store db_putObject:array withId:@"arrayID" intoTable:tableName];

demo效果

  • 只需实现加载请求以及配置自定义cell和上述代码,就能轻松实现以下效果,最重要的是代码解耦。

image

使用方法

  • 拖拽MVVM文件夹,然后在模块代码中新建ViewModel子类,继承MVVMBaseViewModel类型,实现加载数据等方法。
  • 根据需要继承MVVMTableDataDelegate或MVVMCollectionDataDelegate扩展方法,如需显示多种cell,重写显示cell的数据源方法即可
  • 在Controller中,初始化tableView或者collectionView,根据需要实现block代码,将自动根据传入的内容去展现数据。
  • 利用xib自定义cell,在- (void)configure:customObj:indexPath:方法中根据模型Model内容配置cell展示的数据。

期待

  • 如果在使用过程中遇到BUG,希望你能Issues我,谢谢(或者尝试下载最新的代码看看BUG修复没有)
  • 如果在使用过程中发现功能不够用,希望你能Issues我,我非常想为这个框架增加更多好用的功能,谢谢

推荐-几篇不错的MVVM学习文章

Latest podspec

{
    "name": "MVVMFramework",
    "version": "0.0.7",
    "summary": "MVVMFramework is a MVVM frameWork easy to develop iOS",
    "homepage": "https://github.com/lovemo/MVVMFramework",
    "platforms": {
        "ios": "7.0"
    },
    "license": "MIT",
    "authors": {
        "lovemo": "[email protected]"
    },
    "source": {
        "git": "https://github.com/lovemo/MVVMFramework.git",
        "tag": "0.0.7"
    },
    "requires_arc": true,
    "public_header_files": "SUIMVVM/**/*.h",
    "frameworks": [
        "CoreFoundation",
        "Foundation",
        "CoreGraphics",
        "UIKit"
    ],
    "libraries": "sqlite3",
    "subspecs": [
        {
            "name": "SUIMVVM",
            "source_files": "SUIMVVM/**/*.{h,m,mm}",
            "requires_arc": true,
            "dependencies": {
                "MJRefresh": [],
                "AFNetworking": [],
                "SVProgressHUD": [],
                "FDFullscreenPopGesture": [],
                "MJExtension": [],
                "SDWebImage": [],
                "FMDB": [],
                "LxDBAnything": [],
                "Masonry": []
            }
        }
    ]
}

Pin It on Pinterest

Share This