swift tableView registerCell基于协议的实现和使用
来源:互联网 发布:温长卿 知乎 编辑:程序博客网 时间:2024/05/21 09:55
//
//
// Created by zhuangch on 16/10/26.
// Copyright © 2016年. All rights reserved.
//
import UIKit
protocol ABReusableView: class {
static var defaultReuseIdentifier: String { get }
}
extension ABReusableView where Self: UIView {
static var defaultReuseIdentifier: String {
return NSStringFromClass(self)
}
}
extension UITableViewCell: ABReusableView {
}
protocol ABNibLoadableView: class {
static var nibName: String { get }
}
extension ABNibLoadableView where Self: UIView {
static var nibName: String {
return NSStringFromClass(self).components(separatedBy: ".").last!
}
}
extension UITableView {
func register<T: UITableViewCell>(_: T.Type) where T: ABReusableView, T: ABNibLoadableView {
let bundle = Bundle(for: T.self)
let nib = UINib(nibName: T.nibName, bundle: bundle)
register(nib, forCellReuseIdentifier: T.defaultReuseIdentifier)
}
func register<T: UITableViewCell>(_: T.Type) where T: ABReusableView {
register(T.self, forCellReuseIdentifier: T.defaultReuseIdentifier)
}
func dequeueReusableCell<T: UITableViewCell>(for indexPath: IndexPath) -> T where T: ABReusableView {
guard let cell = dequeueReusableCell(withIdentifier: T.defaultReuseIdentifier, for: indexPath) as? T else {
fatalError("Could not dequeue cell with identifier: \(T.defaultReuseIdentifier)")
}
return cell
}
}
//
// Created by zhuangch on 16/10/26.
// Copyright © 2016年. All rights reserved.
//
import UIKit
protocol ABReusableView: class {
static var defaultReuseIdentifier: String { get }
}
extension ABReusableView where Self: UIView {
static var defaultReuseIdentifier: String {
return NSStringFromClass(self)
}
}
extension UITableViewCell: ABReusableView {
}
protocol ABNibLoadableView: class {
static var nibName: String { get }
}
extension ABNibLoadableView where Self: UIView {
static var nibName: String {
return NSStringFromClass(self).components(separatedBy: ".").last!
}
}
extension UITableView {
func register<T: UITableViewCell>(_: T.Type) where T: ABReusableView, T: ABNibLoadableView {
let bundle = Bundle(for: T.self)
let nib = UINib(nibName: T.nibName, bundle: bundle)
register(nib, forCellReuseIdentifier: T.defaultReuseIdentifier)
}
func register<T: UITableViewCell>(_: T.Type) where T: ABReusableView {
register(T.self, forCellReuseIdentifier: T.defaultReuseIdentifier)
}
func dequeueReusableCell<T: UITableViewCell>(for indexPath: IndexPath) -> T where T: ABReusableView {
guard let cell = dequeueReusableCell(withIdentifier: T.defaultReuseIdentifier, for: indexPath) as? T else {
fatalError("Could not dequeue cell with identifier: \(T.defaultReuseIdentifier)")
}
return cell
}
}
使用方法:
自定义的cell需要继承ABNibLoadableView
注册:tableView.register(CustomedCell.self)
let cell: CustomedCell = tableView.dequeueReusableCell(for: indexPath)
1 0
- swift tableView registerCell基于协议的实现和使用
- swift中tableview的使用和注意事项
- swift- tableView 的使用
- swift 创建tableView 并实现协议
- Swift初窥--使用Swift实现TableView
- swift中tableview的使用
- 用swift实现tableview的展示
- Swift 协议的使用
- Swift中tableView的建立与使用
- Swift学习之--TableView的基本使用
- iOS TableView 使用(swift)
- swift-tableview使用
- Swift的协议默认实现
- 1CCTableView的使用,TableView响应和小格子tableView实现
- Swift XXXLiteralConvertible 协议的使用
- Swift 协议代理的使用和传值
- 基于creator的tableView和pageView
- Swift - 简单实现一个tableView
- 64位IIS7.5 上部署32位应用程序,Office组件访问失
- JSON的三种解析方式
- Java字符串加密解密MD5
- 面向对象的六大原则(之二)
- Spark多文件输出(MultipleTextOutputFormat)
- swift tableView registerCell基于协议的实现和使用
- Ubuntu下挂载移动硬盘拷贝数据
- UnsupportedMethodException Unsupported method: AndroidProject.getPluginGeneration().
- nyoj A+BProblemIV
- 中软国际解放号:IT服务行业的“天猫”
- C++_构造函数和析构函数
- 我想好在取吧。
- 数据库连接池技术-转载
- android EventBus的使用