//
//  GMBaseTableView.m
//  Gengmei
//
//  Created by 翟国钧 on 15/1/14.
//  Copyright (c) 2015年 Wanmeichuangyi. All rights reserved.
//

#import "GMTableView.h"
#import "UIView+Layout.h"

@implementation GMTableView

- (instancetype)initWithCoder:(NSCoder *)coder
{
    self = [super initWithCoder:coder];
    if (self) {
        [self setup];
    }
    return self;
}


- (instancetype)initWithFrame:(CGRect)frame style:(UITableViewStyle)style{
    self = [super initWithFrame:frame style:style];
    if (self) {
        [self setup];
    }
    return self;
}

- (void)setup{
    self.keyboardDismissMode = UIScrollViewKeyboardDismissModeOnDrag;
    self.separatorStyle = UITableViewCellSeparatorStyleNone;
}

@end

@implementation GMTableView (FixWierdTableHeaderAnimation)


- (void)fixWierdTableHeaderAnimationWhenRefreshFinish {

    if (self.tableHeaderView.height > 0) {
        return;
    }

    // 我们希望在拖动时 section header 可以浮在上面，所以使用 scrollView.dragging 来区分。
    if (self.dragging) {

        // 在手动拖拽时，立即设置 contentInset 为 UIEdgeInsetsZero，就可以保证 section header 浮在上面。
        self.contentInset = UIEdgeInsetsZero;
    }else{

        // 下拉时， 这两个分支保证在下拉过程及刷新后， section 及 table 能回复到正确位置
        CGFloat sectionHeaderHeight = 64;

        // 下拉刷新结束，scrollView 自动复位，那么此时也立即改变 UIEdgeInsetsMake 以保证 section header 能跟随 scroll view 一起动
        if (self.contentOffset.y < sectionHeaderHeight && self.contentOffset.y >= 0) {
            self.contentInset = UIEdgeInsetsMake(-self.contentOffset.y, 0, 0, 0);
        }

        // 当 table view 恢复到原来的位置，其实 contentInset，contentOffset 已经被我们改变，要恢复到初始状态
        else if (self.contentOffset.y == sectionHeaderHeight) {

            self.contentInset = UIEdgeInsetsZero;
            self.contentOffset = CGPointZero;
        }
    }
}

@end

@implementation UITableView (Register)
- (void)registerCell:(Class)cellClass {
    if ([cellClass isSubclassOfClass:[UITableViewCell class]]) {
        [self registerClass:cellClass forCellReuseIdentifier:NSStringFromClass(cellClass)];
    }
}

- (void)registerHeaderFooterView:(Class)aClass {
    if ([aClass isSubclassOfClass:[UITableViewHeaderFooterView class]]) {
        [self registerClass:aClass forHeaderFooterViewReuseIdentifier:NSStringFromClass(aClass)];
    }
}

- (__kindof UITableViewCell *)dequeueCell:(Class)cellClass forIndexPath:(NSIndexPath *)indexPath {
    return [self dequeueReusableCellWithIdentifier:NSStringFromClass(cellClass) forIndexPath:indexPath];
}

- (__kindof UITableViewHeaderFooterView *)dequeueHeaderFooterView:(Class)headerFooterViewClass {
    return [self dequeueReusableHeaderFooterViewWithIdentifier:NSStringFromClass(headerFooterViewClass)];
}

@end
