Weird behavior when scrolling and selecting in UICollectionView
<p>I am having issues with displaying a checkmark on the a custom cell in a UICollectionView. For the first few taps everything works as expected, but when I begin scrolling or tapping repeatedly or click on the already selected cell, the behavior becomes odd as shown in the gif. Perhaps I am going about this in an incorrect way? The .addCheck() and .removeCheck() are methods inside the custom UICollectionViewCell class I made and all they do is add a checkmark image or remove one from the cell view. <a href="http://i.stack.imgur.com/QTo3M.gif" rel="nofollow">The odd behavior shown here</a></p>

<pre><code>override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -&gt; UICollectionViewCell {

    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! ColorUICollectionViewCell

    // Configure the cell
    let color = colorList[(indexPath as NSIndexPath).row]
    cell.delegate = self
    cell.textLabel.text = color.name
    cell.backgroundColor = color.color

    if color.selected {
        cell.addCheck()
    }
    else {
        cell.removeCheck()
    }

    return cell
}

// user selects item
override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {

    // set colors to false for selection
    for color in colorList {
        color.selected = false
    }

    // set selected color to true for selection
    let color = colorList[indexPath.row]
    color.selected = true
    settings.backgroundColor = color.color
    //userDefaults.set(selectedIndex, forKey: "selectedIndex")
    collectionView.reloadData()
}
</code></pre>

<p>Below is what the addCheck() and removeCheck() functions in my custom cell look like.</p>

<pre><code>func addCheck() {
    // create check image
    let checkImage = UIImage(named: "checkmark")
    checkImageView = UIImageView(frame: CGRect(x: 0, y: 0, width: bounds.size.height / 4, height: bounds.size.height / 4))
    checkImageView.image = checkImage!.withRenderingMode(UIImageRenderingMode.alwaysTemplate)
    checkImageView.tintColor = UIColor.white()

    // add the views
    addSubview(checkImageView)
}

func removeCheck() {
    if checkImageView != nil {
        checkImageView.removeFromSuperview()
    }
}
</code></pre>