컬렉션뷰의 당겨서 새로고침 기능을 구현하기 위한 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()
        }
    }
}

+ Recent posts