collectionViewCellにチェックマークをつける

## はじめに
今日できた実装の記録として書いているので説明はざっくりとしてます
これから少しずつ直したり，補足したりしていきます！
言語はSwiftで，Xcodeのバージョンは14.0.1です
collectionViewの実装ができていることを前提にして書いていきます〜

## 1. 新しくUICollectionViewCellがサブクラスのファイルをつくる
#### ① 写真のようにフォルダマークの項目の上を指2本でクリック→New File(新規ファイル)をクリック
![IMG_5691.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2659712/9a95c34c-56f7-7dbf-6994-40e49dcdc000.png)



#### ② 写真のとおりに選択して`Next`
![スクリーンショット 2023-02-05 22.23.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2659712/2e7dfec9-9a93-abe0-9328-37773b679a11.png)


#### ③ 写真のとおりに設定して`Next` → その後表示されるウィンドウの右下の`Create`クリック

![スクリーンショット 2023-02-05 22.24.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2659712/568c1751-beda-42b1-3d50-ac7b5f3546e2.png)

## 2. CustomCellファイルに書き込む
「1. 新しくUICollectionViewCellがサブクラスのファイルをつくる」で作ったファイルにプログラムを書いていきます

#### 準備： チェックマークの画像をネットで見つけて保存 → XcodeのAssetに入れる
画像の形を正方形にしておくこと！(あとでチェックマークの大きさを調整する時に楽)

#### ① 以下のプログラムを書く
```Swift: Swift
import UIKit

class CustomCell: UICollectionViewCell {
    let checkmarkImage: UIImage = UIImage(named: "check")!
    var checkmarkView: UIImageView!
    var isMarked: Bool = false {
        didSet {
            if isMarked {
                checkmarkView.frame = CGRectMake(-7,0,35,25) //チェックマークの設定
                self.contentView.addSubview(self.checkmarkView!)
            } else {
                self.checkmarkView?.removeFromSuperview()
            }
        }
    }
    func clearCheckmark() -> Void {
        self.isMarked = false
    }
    
    override init(frame: CGRect) {
        super.init(frame: frame)
        self.checkmarkView = UIImageView(image: self.checkmarkImage)
    }
    
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}
```

* `let checkmarkImage: UIImage = UIImage(named: "check")!`の""内はXcodeに取り込んだ画像の名前です
* チェックマークの設定とコメントしている行でチェックマークを表示させる位置と大きさを設定します
    * `CGRectMake(x座標, y座標, 横幅, 縦幅)`だったはず

## 3. ViewControllerのファイル(collectionViewの宣言をしているファイル)にプログラムを書く

#### ① クラスがUICollectionViewDelegateも継承するようにする
```Swift
class MemoCollectionViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate {
```
みたいな感じ

#### ② `override func viewDidLoad(){}`の{}の中に下4行のプログラムを書く
```Swift
collectionView.register(CustomCell.self, forCellWithReuseIdentifier: "Cell")
collectionView.delegate = self
self.view.addSubview(collectionView)
self.collectionView.allowsMultipleSelection = true
```


#### ③ `override func viewDidLoad(){}`の後ろに以下のプログラムを書く
```Swift
// Cell がタップで選択されたときに呼ばれる
    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        guard let cell: CustomCell = collectionView.cellForItem(at: indexPath) as? CustomCell else { return }
        if self.collectionView.allowsMultipleSelection {
            cell.isMarked = true
        }
    }
        
    // Cell がタップで選択解除されたときに呼ばれる
    func collectionView(_ collectionView: UICollectionView, didDeselectItemAt indexPath: IndexPath) {
        guard let cell: CustomCell = collectionView.cellForItem(at: indexPath) as? CustomCell else { return }
        if self.collectionView.allowsMultipleSelection {
            cell.isMarked = false
        }
    }
```
###### おしまい！

## 完成イメージ
![スクリーンショット 2023-02-05 22.45.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2659712/2326996d-3528-0317-5256-ea3dff90f7e0.png)



## 参考にしたサイト
https://superhahnah.com/checkmark-on-uicollectionviewcell/


## おわりに
次はcollectionViewCellをスワイプすることでそのCell自体を削除する機能を作ろうと思ってます
最後まで読んでいただきありがとうございました！