         }
     }
     
+    // MARK: - Private Methods
+    
+    private func _selectColor(at indexPath: IndexPath, animated: Bool) {
+        
+        guard let colorPickerCell = collectionView.cellForItem(at: indexPath) as? ColorPickerCell else { return }
+        
+        if indexPath.item == _indexOfSelectedColor, !isSelectedColorTappable {
+            return
+        }
+        
+        if selectionStyle == .check {
+            
+            if indexPath.item == _indexOfSelectedColor {
+                if isSelectedColorTappable {
+                    _indexOfSelectedColor = nil
+                    colorPickerCell.checkbox.setCheckState(.unchecked, animated: animated)
+                }
+                return
+            }
+            
+            _indexOfSelectedColor = indexPath.item
+            
+            colorPickerCell.checkbox.tintColor = colors[indexPath.item].isWhiteText ? .white : .black
+            colorPickerCell.checkbox.setCheckState((colorPickerCell.checkbox.checkState == .checked) ? .unchecked : .checked, animated: animated)
+            
+        }
+        
+        delegate?.colorPickerView(self, didSelectItemAt: indexPath)
+    
+    }
+    
+    // MARK: - Public Methods
+    
+    public func selectColor(at index: Int, animated: Bool) {
+        self._selectColor(at: IndexPath(row: index, section: 0),
+                          animated: animated)
+        
+    }
+    
+    
     // MARK: - UICollectionViewDataSource
     
     public func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {

    
    // TODO: - This method need to be refactored in order to be more readable and expressive
    public func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        let colorPickerCell = collectionView.cellForItem(at: indexPath) as! ColorPickerCell
        
        if indexPath.item == _indexOfSelectedColor, !isSelectedColorTappable {
            return
        }
        
        if selectionStyle == .check {
            
            if indexPath.item == _indexOfSelectedColor {
                if isSelectedColorTappable {
                    _indexOfSelectedColor = nil
                    colorPickerCell.checkbox.setCheckState(.unchecked, animated: true)
                }
                return
            }
            
            _indexOfSelectedColor = indexPath.item
            
            colorPickerCell.checkbox.tintColor = colors[indexPath.item].isWhiteText ? .white : .black
            colorPickerCell.checkbox.setCheckState((colorPickerCell.checkbox.checkState == .checked) ? .unchecked : .checked, animated: true)
            
        }
        
        delegate?.colorPickerView(self, didSelectItemAt: indexPath)
    }
    
    public func collectionView(_ collectionView: UICollectionView, didDeselectItemAt indexPath: IndexPath) {

    open var selectionStyle: ColorPickerViewSelectStyle = .check
    
    // MARK: - Private properties
    
    fileprivate var _indexOfSelectedColor: Int?
    fileprivate lazy var collectionView: UICollectionView = {
        
