GLD_TabelBiner.m
3.71 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
//
// GLD_TabelBiner.m
// YX_BaseProject
//
// Created by yiyangkeji on 2018/4/16.
// Copyright © 2018年 com.yxvzb. All rights reserved.
//
#import "GLD_TabelBiner.h"
#import "UIView+GLD_ErrorView.h"
#import "GLD_NetworkError.h"
@interface GLD_TabelBiner ()
@property (nonatomic, strong)UITableView *view;//view
@property (nonatomic, strong)id<GLD_ListViewModelProtocol> viewModel;
@end
@implementation GLD_TabelBiner
@synthesize view = _tableView;
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
}
- (instancetype)initWithView:(UITableView *)view andViewModel:(id<GLD_ListViewModelProtocol>)viewModel{
self = [super init];
if (self) {
self.view = view;
[self bindViewModel:viewModel];
}
return self;
}
- (void)refreshData {
[self.view.mj_header beginRefreshing];
}
- (void)bindViewModel:(id<GLD_ListViewModelProtocol>) viewModel{
self.viewModel = viewModel;
self.view.delegate = self;
self.view.dataSource = self;
if (IsExist_Array(self.CellClaesses))
for (Class class in self.CellClaesses) {
[self.view registerClass:class forCellReuseIdentifier:[class description]];
}
if (IsExist_Array(self.cellForNibs))
for (UINib *nib in self.cellForNibs) {
[self.view registerNib:nib forCellReuseIdentifier:[nib description]];
}
[self bindErrorView];
}
- (void)bindErrorView{
//订阅,当收到刷新信号时隐藏
@weakify(self);
[self.viewModel.refreshCommand.executionSignals.switchToLatest subscribeNext:^(id x) {
@strongify(self);
self.view.scrollEnabled = YES;
self.view.errorView.hidden = YES;
}];
//订阅错误
[self.viewModel.refreshCommand.errors subscribeNext:^(NSError *error) {
@strongify(self);
[self.view.mj_header endRefreshing];
if (self.viewModel.allData.count == 0) {
self.view.scrollEnabled = NO;
self.view.errorView.hidden = NO;
self.view.errorView.error = error;
self.view.errorView.errorTextButton.rac_command = [[RACCommand alloc]initWithSignalBlock:^RACSignal *(id input) {
[self refreshData];
return [RACSignal empty];
}];
}
}];
}
- (void)bindTableHeader{
@weakify(self);
self.view.mj_header = [MJRefreshHeader headerWithRefreshingBlock:^{
@strongify(self);
[self.viewModel.refreshCommand execute:nil];
}];
[self.viewModel.refreshCommand.executionSignals.switchToLatest subscribeNext:^(id x) {
@strongify(self);
[self.view.mj_header endRefreshing];
[self.view.mj_footer resetNoMoreData];
[self.view reloadData];
}];
}
- (void)bindTableFooter{
if (![self.viewModel respondsToSelector:@selector(loadMoreCommand)] ||
self.viewModel.loadMoreCommand == nil) {
return;
}
@weakify(self);
self.view.mj_footer = [MJRefreshAutoNormalFooter footerWithRefreshingBlock:^{
@strongify(self);
[[self.viewModel.loadMoreCommand execute:nil] subscribeNext:^(id x) {
[self.view.mj_footer endRefreshing];
[self.view reloadData];
} error:^(NSError *error) {
if (error.code == gld_NetworkTaskErrorNoMoreData) {
[self.view.mj_footer endRefreshingWithNoMoreData];
} else {
[self.view.mj_footer endRefreshing];
}
}];
}];
[RACObserve(self.view, contentSize) subscribeNext:^(NSNumber *contentSize) {
@strongify(self);
self.view.mj_footer.hidden = [contentSize CGSizeValue].height < self.view.mj_h;
}];
}
@end