1.話說,原本想作個聚合查詢功能。但是個人重點想研究xmpp聊天功能。因此使用mvvm模式作了全然模式51job主界面的頁面。ios
2.首先給你們看我執行起來的界面。mvc
3.界面很是easy,作這個界面主要是爲了比較mvvm模式和mvc模式之間的差異。app
4.這個界面的結構是下邊這張圖片mvvm
與mvc相比,我多了一個viewmodel文件。ide
mvc以前是把業務邏輯和數據放在viewcontroller裏邊,邏輯複雜的話,別人維護起來很是麻煩。post
我就不貼viewcontroller的圖片了,我把這個代碼上傳給你們,你們可以看看,和mvc相比,是否是很是easy維護。代碼層級會好一些。明天開始研究iosxmpp的聊天功能,因此會暫停一段時間更新。atom
沒辦法,看來僅僅能貼代碼了,我僅僅貼viewcontroller和viewmodel的代碼。你們可以比較下。spa
這是viewcontroller3d
#import <UIKit/UIKit.h>orm
@class MTSOnlineViewModel;
@interface MTSOnlineViewController :UITableViewController
@property(strong,nonatomic)MTSOnlineViewModel *onlineViewModel;
@end
#import "MTSOnlineViewController.h"
#import "MTSOnlineViewModel.h"
#import "MTSOnlineMenuCell.h"
@interface MTSOnlineViewController()<MTSOnlineMenuDelegate>
@end
@implementation MTSOnlineViewController
#pragma mark - UIViewController Overrides
- (void)awakeFromNib
{
[superawakeFromNib];
}
- (void)viewDidLoad
{
[superviewDidLoad];
self.onlineViewModel=[[MTSOnlineViewModelalloc] init];
[self.tableViewsetRowHeight:130.0f];
[self.tableViewsetSeparatorStyle:UITableViewCellSeparatorStyleNone];
@weakify(self);
[self.onlineViewModel.updatedContentSignalsubscribeNext:^(id x) {
@strongify(self);
[self.tableViewreloadData];
}];
}
-(void)viewWillAppear:(BOOL)animated {
[superviewWillAppear:animated];
self.onlineViewModel.active =YES;
}
#pragma mark - Table View
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return [self.onlineViewModelnumberOfItems];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
MTSOnlineMenuCell *cell = [tableViewdequeueReusableCellWithIdentifier:@"onlinecell"forIndexPath:indexPath];
cell.selectionStyle=UITableViewCellSelectionStyleNone;
cell.delegate=self;
[cell configureCell:self.onlineViewModel.tableDataSourceindex:indexPath.row+1];
return cell;
}
#pragma mark --cell delegate
-(void)pressMenuButton:(MTSMenuType)type title:(NSString*)title;
{
[[[UIAlertViewalloc] initWithTitle:@"button測試"message:title delegate:nilcancelButtonTitle:@"確認"otherButtonTitles:nil,nil] show];
}
@end
這是viewmodel
#import "RVMViewModel.h"
@interface MTSOnlineViewModel :RVMViewModel
@property (nonatomic,readonly) RACSignal *updatedContentSignal;
@property (nonatomic,readonly) NSMutableArray *tableDataSource;
-(NSInteger)numberOfItems;
@end
#import "MTSOnlineViewModel.h"
#import "MTSMenuModel.h"
@interface MTSOnlineViewModel ()
@property (nonatomic,strong) RACSubject *updatedContentSignal;
@property (nonatomic,strong) NSMutableArray *tableDataSource;
@end
@implementation MTSOnlineViewModel
-(instancetype)init {
self = [superinit];
if (self ==nil) returnnil;
self.updatedContentSignal = [[RACSubjectsubject] setNameWithFormat:@"MTSOnlineViewModel updatedContentSignal"];
self.tableDataSource = [[NSMutableArrayalloc] init];
@weakify(self)
[self.didBecomeActiveSignalsubscribeNext:^(id x) {
@strongify(self);
[selfmenuDataSource];
}];
return self;
}
#pragma mark - Public Methods
-(NSInteger)numberOfItems{
NSUInteger count = [self.tableDataSourcecount]/3;
return [self.tableDataSourcecount]%3==0?count:count+1;
}
-(void)menuDataSource{
[self.tableDataSourceaddObject:[[MTSMenuModelalloc] init:@"職位搜索"imagePath:@"jobsearch.png"imagePressPath:@"jobsearch_press.png"type:JobSearch]];
[self.tableDataSourceaddObject:[[MTSMenuModelalloc] init:@"校園招聘"imagePath:@"campus.png"imagePressPath:@"campus_press.png"type:Campus]];
[self.tableDataSourceaddObject:[[MTSMenuModelalloc] init:@"職場資訊"imagePath:@"worknews.png"imagePressPath:@"worknews_press.png"type:WorkNews]];
[self.tableDataSourceaddObject:[[MTSMenuModelalloc] init:@"企業粉絲團"imagePath:@"fans.png"imagePressPath:@"fans_focus.png"type:Fans]];
[self.tableDataSourceaddObject:[[MTSMenuModelalloc] init:@"My 51job"imagePath:@"my51job.png"imagePressPath:@"my51job_focus.png"type:My51Job]];
[self.tableDataSourceaddObject:[[MTSMenuModelalloc] init:@"簡歷中心"imagePath:@"resumecenter.png"imagePressPath:@"resumecenter_focus.png"type:Resumecenter]];
[self.tableDataSource addObject:[[MTSMenuModel alloc] init:@"薪酬諮詢" imagePath:@"salaryquery.png" imagePressPath:@"salaryquery_focus.png" type:Salaryquery]];
[self.tableDataSource addObject:[[MTSMenuModel alloc] init:@"申請記錄" imagePath:@"jobapply.png" imagePressPath:@"jobapply_focus.png" type:JobApply]];
[self.tableDataSource addObject:[[MTSMenuModel alloc] init:@"不少其它" imagePath:@"themore.png" imagePressPath:@"themore_focus.png" type:TheMore]];
}
@end