본문 바로가기
개발/ios (swift)

action when clicked button in cell of collectionView

by 즐거운 개발 인생 2022. 3. 2.
728x90
반응형

 

collcetionview의 cell 내부에 있는 UIButton을 눌렀을때 불러온 이미지를 삭제하기 위한 동작에 대한 처리 방법에 대한 글이다.

This is about action for delete image when clicked UIButton in cell of UICollectionView.

 

collectionview 용도 : 갤러리에서 불러온 이미지 미리보기

collectionsview's purpose : previvew image selected from gallery

 

Collectionview의 cell

cell 내부에는 미리보기용 UIImageview와 이미지 삭제를 위한 UIButton이 존재한다.

There is a UIImageView for preview and a UIButton for delete image in cell.

cell

 

//CollectionView cell
class PreviewCell: UICollectionViewCell{
    @IBOutlet weak var preview: UIImageView!
    @IBOutlet weak var deleteButton: UIButton!
    
}

 

//갤러리에서 가지고 온 이미지 정보를 저장하기 위한 struct
//struct for save selected image from gallery
struct PreviewItem {
    var name: String?
    var image: UIImage?
}

 

collectionview를 이용하기 위한 설정

set up to using collection view

connect delegate and datasource to viewController

 

init cell class

cell 내부의 UIButton을 눌렀을때 ViewController에서 가지고 있는 image 정보 배열에서 해당 index의 item을 삭제 처리한다.

delete selected index of item of previewItem array when clicked UIButton in some index of celll.

 

extension PreviewViewController: UICollectionViewDelegate, UICollectionViewDataSource {
   
    var imgItems:[PreviewItem] = []
    
    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        imgItems.count
    }
    
    
    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "previewCell", for: indexPath) as?
                PreviewCell else {
               return UICollectionViewCell()
           }
        
        let item = imgItems[indexPath.row]
        
        //cell의 버튼을 눌렀을때 동작 연결
        //connect func when clicked UIButton in cell
        cell.deleteButton.tag = indexPath.row
        cell.deleteButton.addTarget(self, action: #selector(deletePreview(sender:)), for: .touchUpInside)
        
        if item.image != nil {
            cell.preview.image = item.image
        } 
        return cell
    }
    
    //cell의 UIButton을 눌렀을때 하려는 동작
    //write somthig to do when clicked UIButton in cell
    @objc func deletePreview(sender: UIButton){
    //cell 삭제 //delete cell at index of collectionview
        self.previewCollectionView.deleteItems(at: [IndexPath.init(row: sender.tag, section: 0)])
      //이미지 아이템 배열의 데이터 삭제 // delete item at index of item array
      self.imgItems.remove(at: sender.tag)
    }
}

 

 

728x90
반응형

댓글