OC、Swift Cell Identifier改造

2017-03-24  本文已影响154人  cocoaroger

Swift Cell 改造

参考:https://gist.github.com/gonzalezreal/92507b53d2b1e267d49a

/// 可复用协议
protocol Reusable: class {
  /// 复用的id
  static var identifier: String { get }
}

extension Reusable where Self: UIView {
  static var identifier: String {
    return NSStringFromClass(self)
  }
}

extension UICollectionViewCell: Reusable {}

extension UITableViewCell: Reusable {}

// 这个前提是 Storyboard 中设置的 Storyboard ID 与类名相同, 否则会 crash
extension UIViewController: Reusable {
  static var identifier: String {
    let className = NSStringFromClass(self) as NSString
    return className.components(separatedBy: ".").last!
  }
}

// 调用时,就可以这么调用了
let cell = tableView.dequeueReusableCell(withIdentifier: CustomerCell.identifier)

OC Cell 改造

@implementation SCBaseTableViewCell

+ (instancetype)cellWithTableView:(UITableView *)tableView {
    NSString *identifier = NSStringFromClass(self);
    SCBaseTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
    if (!cell) {
        cell = [[self alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];
    }
    return cell;
}

- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
        [self setupViews];
    }
    return self;
}

// 由子类去实现视图自定义
- (void)setupViews {}

@end

// 方法调用
SCActivityCell *cell = [SCActivityCell cellWithTableView:tableView];
cell.model = model;
上一篇下一篇

猜你喜欢

热点阅读