티스토리 뷰

IOS/UIKit

collectionView cell 삭제

내일도이렇게 2021. 12. 16. 22:19

collectionView  Cell 삭제하는 방법에 대해 작성하고자 한다. 

 

cell에 view 레이아웃을 잡고 투명도를 50퍼센트한 후 checkmark.circle 와 view 두개 요소를 Hidden 체크한다.  

<CollectionViewCell> 

상태에 따라 변화를 준다. 

  @IBOutlet var highlightIndicator: UIView!
    
  @IBOutlet var selectIndicator: UIImageView!

  override var isHighlighted: Bool {
        didSet {
            highlightIndicator.isHidden = !isHighlighted
        }
    }
    
    override var isSelected: Bool {
        didSet {
            highlightIndicator.isHidden = !isSelected
            selectIndicator.isHidden = !isSelected
        }
    }

 

 

 

<ViewController> 

 

기본모드, 셀렉트 모드 나눠서 로직을 구현한다. 

enum Mode {
    case view
    case select
}

var dictionarySelectedIndexPath: [IndexPath : Bool] = [:]

var eMode: Mode = .view {
        didSet {
            switch eMode {
            case .view:
                for (key, value) in dictionarySelectedIndexPath {
                    if value {
                        collectionView.deselectItem(at: key, animated: true)
                    }
                }
                dictionarySelectedIndexPath.removeAll()
                
                selectBarButton.title = "선택"
                navigationItem.leftBarButtonItem = nil
                collectionView.allowsMultipleSelection = false
                
            case .select:
                selectBarButton.title = "취소"
                navigationItem.leftBarButtonItem = deleteBarButton
                collectionView.allowsMultipleSelection = true
            }
        }
    }

선택 버튼, 삭제 버튼을 만든다. 

lazy var selectBarButton : UIBarButtonItem = {
        let barButtonItem = UIBarButtonItem(title: "선택", style: .plain, target: self, action: #selector(didSelectButtonClicked(_:)))
        return  barButtonItem
    }()
    
lazy var deleteBarButton : UIBarButtonItem = {
        let barButtonItem = UIBarButtonItem(barButtonSystemItem: .trash, target: self, action: #selector(didDeleteButtonClicked(_:)))
        return barButtonItem
    }()

 

선택버튼 클릭 함수 구현 , 삭제 버튼 클릭 함수 구현 

삭제 버튼 클릭 시  삭제하기 위해 선택한 셀을 찾아 Realm 에서 삭제하고 reloadData 한다. 

    @objc func didSelectButtonClicked(_ sender: UIBarButtonItem) {
        eMode = eMode == .view ? .select : .view
        
    }
    
    @objc func didDeleteButtonClicked(_ sender: UIBarButtonItem) {
        
        var deleteNeededIndexPaths: [IndexPath] = []
        
        for (key,value) in dictionarySelectedIndexPath {
            if value {
                deleteNeededIndexPaths.append(key)
            }
        }
        
        for i in deleteNeededIndexPaths.sorted(by: { $0.item > $1.item }){
            
            let row = self.isFiltering ? filteredStock[i.row] : tasks[i.row]
            
            try! localRealm.write {
                localRealm.delete(row)
            }
            
        }
        collectionView.deleteItems(at: deleteNeededIndexPaths)
        dictionarySelectedIndexPath.removeAll()
        collectionView.reloadData()

    }

 

오른쪽 버튼 아이템을 적용한다.

   func setUpBarButtonItems() {
        navigationItem.rightBarButtonItem = selectBarButton
        
    }
    
    
   override func viewDidLoad() {
      setUpBarButtonItems()
    
   }

 

 

컬렉션 뷰 셀 선택시 뷰모드 , 셀렉트 모드 나눠서 로직 구현한다. 

    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        
        switch eMode {
        case .view :
            collectionView.deselectItem(at: indexPath, animated: true)
            
            let vc = self.storyboard?.instantiateViewController(withIdentifier: "StockStudyDetailViewController") as! StockStudyDetailViewController
            
            vc.studyData = self.isFiltering ? filteredStock[indexPath.row] : tasks[indexPath.row]
            
            let nav = UINavigationController(rootViewController: vc)
            nav.modalPresentationStyle = .fullScreen
            
            self.present(nav,animated: true, completion: nil)
            
        case .select :
            dictionarySelectedIndexPath[indexPath] = true
            
        }
    
    }

 

'IOS > UIKit' 카테고리의 다른 글

iOS ViewController 생명주기  (0) 2022.07.03
[AutoLayout] Hugging priority & Compression Priority  (0) 2022.03.24
CustomView (xib) 만들기  (0) 2022.03.14
UIScrollView 구현  (0) 2022.02.05
UIStackView 기초  (0) 2022.01.28
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함