swift TableView和Collection扩展
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了swift TableView和Collection扩展相关的知识,希望对你有一定的参考价值。
//
// UITableView+Extensions.swift
// Tele2
//
// Created by l.nifantyev on 9/5/18.
// Copyright © 2018 Tele2. All rights reserved.
//
import Foundation
import UIKit
protocol ReusableView {}
protocol NibLoadableView {}
typealias NibLoadableReusable = ReusableView & NibLoadableView
//MARK: - UITableViewCell: ReusableView & NibLoadableView
extension ReusableView where Self: UITableViewCell {
static var reuseIdentifier: String {
return String(describing: self)
}
}
extension ReusableView where Self: UITableViewHeaderFooterView {
static var reuseIdentifier: String {
return String(describing: self)
}
}
extension NibLoadableView where Self: UITableViewCell {
static var nibName: String {
return String(describing: self)
}
}
extension NibLoadableView where Self: UITableViewHeaderFooterView {
static var nibName: String {
return String(describing: self)
}
}
extension UITableView {
func register<T: UITableViewCell>(_: T.Type) where T: ReusableView {
register(T.self, forCellReuseIdentifier: T.reuseIdentifier)
}
func register<T: UITableViewHeaderFooterView>(_: T.Type) where T: ReusableView {
register(T.self, forHeaderFooterViewReuseIdentifier: T.reuseIdentifier)
}
func register<T: UITableViewHeaderFooterView>(_: T.Type) where T: ReusableView, T: NibLoadableView {
let bundle = Bundle(for: T.self)
let nib = UINib(nibName: T.nibName, bundle: bundle)
register(nib, forHeaderFooterViewReuseIdentifier: T.reuseIdentifier)
}
func register<T: UITableViewCell>(_: T.Type) where T: ReusableView, T: NibLoadableView {
let bundle = Bundle(for: T.self)
let nib = UINib(nibName: T.nibName, bundle: bundle)
register(nib, forCellReuseIdentifier: T.reuseIdentifier)
}
func dequeueReusableCell<T: UITableViewCell>(for indexPath: IndexPath) -> T where T: ReusableView {
guard let cell = self.dequeueReusableCell(withIdentifier: T.reuseIdentifier, for: indexPath) as? T else {
fatalError("Could not dequeue cell with identifier: \(T.reuseIdentifier)")
}
return cell
}
func dequeueReusableHeaderFooterView<T: UITableViewHeaderFooterView>() -> T where T: ReusableView {
guard let headerView = self.dequeueReusableHeaderFooterView(withIdentifier: T.reuseIdentifier) as? T else {
fatalError("Could not dequeue HeaderFooter with identifier: \(T.reuseIdentifier)")
}
return headerView
}
}
//
// UICollectionView+Extensions.swift
// GT_PhotoAlbums
//
// Created by Leonid Nifantyev on 11/24/18.
// Copyright © 2018 Leonid Nifantyev. All rights reserved.
//
import UIKit
extension ReusableView where Self: UICollectionViewCell {
static var reuseIdentifier: String {
return String(describing: self)
}
}
extension NibLoadableView where Self: UICollectionViewCell {
static var nibName: String {
return String(describing: self)
}
}
extension UICollectionView {
func register<T: UICollectionViewCell>(_: T.Type) where T: ReusableView {
register(T.self, forCellWithReuseIdentifier: T.reuseIdentifier)
}
func register<T: UICollectionViewCell>(_: T.Type) where T: ReusableView, T: NibLoadableView {
let bundle = Bundle(for: T.self)
let nib = UINib(nibName: T.nibName, bundle: bundle)
register(nib, forCellWithReuseIdentifier: T.reuseIdentifier)
}
func dequeueReusableCell<T: UICollectionViewCell>(for indexPath: IndexPath) -> T where T: ReusableView {
guard let cell = self.dequeueReusableCell(withReuseIdentifier: T.reuseIdentifier, for: indexPath) as? T else {
fatalError("Could not dequeue cell with identifier: \(T.reuseIdentifier)")
}
return cell
}
}
以上是关于swift TableView和Collection扩展的主要内容,如果未能解决你的问题,请参考以下文章
Swift - saveContext()、tableView、scrollView 和 reloadRows 问题?
Swift 3 和 Firebase - Tableview 未更新
如何保持 Tableview 滚动以及如何在 Swift3 中删除原型单元和 tableview 之间的空白空间