Swift/UICollectionView
[SWIFT]UICellectionView RefreshControl 추가하기
삽질중
2023. 4. 26. 14:08
컬렉션뷰의 당겨서 새로고침 기능을 구현하기 위한 UIRefreshControl 추가해 보겠다.
extension UICollectionView {
var reloadDataCompletionBlock: (() -> Void)?
func reloadDataWithCompletion(_ completion:@escaping () -> Void) {
reloadDataCompletionBlock = completion
super.reloadData()
}
override func layoutSubviews() {
super.layoutSubviews()
if let block = self.reloadDataCompletionBlock {
block()
}
}
}
extension UserViewController {
func viewUpdate(rst: Int, rstMessage: String) {
if rst != API_SUcCESS {
DispatchQueue.main.async { [weak self] in
// reload 후 완료되면 refresh 컨트롤 해제
self?.collectionView.reloadDataWithCompletion {
self?.homeCollectionView.reloadDataCompletionBlock = nil
self?.refreshControl.endRefreshing()
}
}
}
}
}
class UserViewController: UIViewController {
lazy var refreshControl: UIRefreshControl = {
let refreshCtl = UIRefreshControl()
refreshCtl.tintColor = .darkGray
refreshCtl.addTarget(self, action: #selector(refresh), for: .valueChanged)
return refreshCtl
}()
@IBOutlet weak var collectionView:UICollectionView! {
didSet {
collectionView.register(UserCell.self)
collectionView.delegate = self
collectionView.dataSource = self
collectionView.bounces = true
collectionView.alwayBounceVertical = true
//리플래시 컨트롤을 컬렉션뷰에 추가
collectionView.addSubview(refreshControl)
}
}
@objc func refresh() {
// 여기서 새로 고침
DispatchQueue.main.async { [weak self] in
self?.userViewModel.removeAllData()
self?.userViewModel.requestModelData()
}
}
}