MJRefreshBackStateFooter
添加顯示狀態(tài)的label以及跟著狀態(tài)的變化修改狀態(tài)label上顯示的文字
@implementation MJRefreshBackStateFooter
#pragma mark - 懶加載
- (NSMutableDictionary *)stateTitles
{
if (!_stateTitles) {
self.stateTitles = [NSMutableDictionary dictionary];
}
return _stateTitles;
}
- (UILabel *)stateLabel
{
if (!_stateLabel) {
[self addSubview:_stateLabel = [UILabel mj_label]];
}
return _stateLabel;
}
#pragma mark - 公共方法
- (void)setTitle:(NSString *)title forState:(MJRefreshState)state
{
if (title == nil) return;
self.stateTitles[@(state)] = title;
self.stateLabel.text = self.stateTitles[@(self.state)];
}
- (NSString *)titleForState:(MJRefreshState)state {
return self.stateTitles[@(state)];
}
#pragma mark - 重寫父類的方法
- (void)prepare
{
[super prepare];
// 初始化間距
self.labelLeftInset = MJRefreshLabelLeftInset;
// 初始化文字
[self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshBackFooterIdleText] forState:MJRefreshStateIdle];
[self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshBackFooterPullingText] forState:MJRefreshStatePulling];
[self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshBackFooterRefreshingText] forState:MJRefreshStateRefreshing];
[self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshBackFooterNoMoreDataText] forState:MJRefreshStateNoMoreData];
}
- (void)placeSubviews
{
[super placeSubviews];
if (self.stateLabel.constraints.count) return;
// 狀態(tài)標簽
self.stateLabel.frame = self.bounds;
}
// 根據(jù)狀態(tài)的變化瓮栗,修改狀態(tài)文字
- (void)setState:(MJRefreshState)state
{
MJRefreshCheckState
// 設(shè)置狀態(tài)文字
self.stateLabel.text = self.stateTitles[@(state)];
}
@end
總結(jié):這種把沒一個子模塊子功能單獨設(shè)計成一個類,是的結(jié)構(gòu)清晰,非常干凈整潔费奸,但有一些缺點弥激,如果讀源碼的人從子類讀到父類,會有一大堆方法在父類愿阐,一個個網(wǎng)上找微服,會很麻煩,這種如果對源碼了解會覺得很清晰缨历,如果對源碼不了解以蕴,會覺得很復雜繁瑣