#はじめに
今回はExtensionを使ってカスタムセルを登録、生成するする方法を紹介します。
#Extension
extension NSObjectProtocol {
static var className: String {
return String(describing: self)
}
}
extension UITableViewCell {
static var identifier: String {
return className
}
}
extension UITableView {
func registerCustomCell<T: UITableViewCell>(_ cellType: T.Type) {
register(
UINib(nibName: T.identifier, bundle: nil),
forCellReuseIdentifier: T.identifier
)
}
func dequeueReusableCustomCell<T: UITableViewCell>(with cellType: T.Type) -> T {
return dequeueReusableCell(withIdentifier: T.identifier) as! T
}
}
extension UICollectionViewCell {
static var identifier: String {
return className
}
}
extension UICollectionView {
func registerCustomCell<T: UICollectionViewCell>(_ cellType: T.Type) {
register(
UINib(nibName: T.identifier, bundle: nil),
forCellWithReuseIdentifier: T.identifier
)
}
func dequeueReusableCustomCell<T: UICollectionViewCell>(with cellType: T.Type,
indexPath: IndexPath) -> T {
return dequeueReusableCell(withReuseIdentifier: T.identifier,
for: indexPath) as! T
}
}
#実装例
class ViewController: UIViewController {
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
tableView.delegate = self
tableView.dataSource = self
// before
tableView.register(
UINib(nibName: "CustomTableViewCell", bundle: nil),
forCellReuseIdentifier: "CustomTableViewCell"
)
// after
tableView.registerCustomCell(CustomTableViewCell.self)
}
}
extension ViewController: UITableViewDelegate {
}
extension ViewController: UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 100
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
// before
let cell = tableView.dequeueReusableCell(withIdentifier: "CustomTableViewCell") as! CustomTableViewCell
// after
let cell = tableView.dequeueReusableCustomCell(with: CustomTableViewCell.self)
return cell
}
}
#おわりに
おわりです。