ios--->MVVM使用😀
2016-06-21 本文已影响551人
Hither
最近发现自己的项目里C层的代码越来越多,即便把数据源和各种代理分离出去,也是多。就开始用MVVM来组织我的项目。下面是我找的一个demo我在他的基础上进行了修改下,公司的项目就不拿出来看了,嘿嘿😀,都是基于MVVM进行组织的。😂
-
我的项目结构:
在ViewModel里面有两个类。
第一个ViewModel:
//获取网络的链接状态
-(void) netWorkStateWithNetConnectBlock: (NetWorkBlock) netConnectBlock WithURlStr: (NSString *) strURl;
// 传入交互的Block块
-(void) setBlockWithReturnBlock: (ReturnValueBlock) returnBlock
WithErrorBlock: (ErrorCodeBlock) errorBlock
WithFailureBlock: (FailureBlock) failureBlock;
第二个ViewModel:
//跳转到微博详情页
-(void) weiboDetailWithPublicModel: (WBDataUser *) publicModel WithViewController: (UIViewController *)superController;
//tableView刷新的网络请求
-(void)RefreshRequestWithCallback:(callback)callback isHead:(BOOL)result;
重点讲讲跳转和刷新:
(1)跳转:
#pragma 跳转到详情页面,如需网路请求的,可在此方法中添加相应的网络请求
-(void) weiboDetailWithPublicModel:(WBDataUser *)publicModel WithViewController:(UIViewController *)superController
{
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]];
PublicDetailViewController *detailController = [storyboard instantiateViewControllerWithIdentifier:@"PublicDetailViewController"];
detailController.publicModel = publicModel;
[superController.navigationController pushViewController:detailController animated:YES];
}
这个是直接使用StroyBoard搭建的界面:
注意两个地方:
![](https://img.haomeiwen.com/i1389022/29615834d4b33fda.png)
记得设置StroyBoard ID 和Class
![](https://img.haomeiwen.com/i1389022/670b799c3b143647.png)
![](https://img.haomeiwen.com/i1389022/6b6360181b5fee9e.png)
记得设置Cell的Class 和Identifier 以及Accessory
(2)刷新:
在ViewModel里:
-(void)RefreshRequestWithCallback:(callback)callback isHead:(BOOL)result{
if (result) {
_page = 1;
}else{
if (_page < 2) {
_page = 2;
}
}
[HJTNetTool get:[NSString stringWithFormat:@"%@?access_token=%@&count=100",GetData,ACCESSTOKEN] progress:^(NSProgress * _Nonnull progress) {
} success:^(id _Nonnull responseObject) {
_model = [[WBDataWBData alloc]initWithDictionary:responseObject];
if (_model.statuses) {
NSMutableArray *dataArray=[NSMutableArray array];
if (result) {
[dataArray removeAllObjects];
}else{
_page ++;
}
for (WBDataStatuses* statues in _model.statuses) {
[dataArray addObject:statues.user];
}
callback(dataArray);
}
} failure:^(NSString * _Nonnull errorLD) {
SHOW_NTERROR
}];
}
使用的VC中:
//下拉加载
-(void)loadNewData{
[tableViewModel RefreshRequestWithCallback:^(NSArray *array) {
_publicModelArray = [array mutableCopy];
[self.tableView.mj_header endRefreshing];
[self.tableView reloadData];
} isHead:YES];
}
//上拉加载更多
-(void)loadMoredata{
[tableViewModel RefreshRequestWithCallback:^(NSArray *array) {
_publicModelArray = [array mutableCopy];
[self.tableView.mj_footer endRefreshing];
[self.tableView reloadData];
} isHead:NO];
}
MVVM相比MVC,把逻辑处理和网络请求都放到了ViewModel这个类中进行,比起简简单单的分离数据源和代理,C层变得更加易于维护。
Demo地址: