diff --git a/ImagePicker/ImagePickerController.swift b/ImagePicker/ImagePickerController.swift index 35aa72a..2706b19 100644 --- a/ImagePicker/ImagePickerController.swift +++ b/ImagePicker/ImagePickerController.swift @@ -53,6 +53,12 @@ public protocol ImagePickerControllerDelegate : class { /// to configure your cell based on asset media type, subtype, etc. /// func imagePicker(controller: ImagePickerController, willDisplayAssetItem cell: ImagePickerAssetCell, asset: PHAsset) + + /// + /// Called right before an asset item collection view cell is selected. + /// Return false to prevent selection + /// + func imagePicker(controller: ImagePickerController, shouldSelectCellAt: Int) -> Bool } //this will make sure all delegate methods are optional @@ -63,6 +69,11 @@ extension ImagePickerControllerDelegate { public func imagePicker(controller: ImagePickerController, didTake image: UIImage) {} public func imagePicker(controller: ImagePickerController, willDisplayActionItem cell: UICollectionViewCell, at index: Int) {} public func imagePicker(controller: ImagePickerController, willDisplayAssetItem cell: ImagePickerAssetCell, asset: PHAsset) {} + // public func imagePicker(controller: ImagePickerController, willDisplayAssetItem cell: ImagePickerAssetCell, asset: PHAsset) {} + public func imagePicker(controller: ImagePickerController, shouldSelectCellAt: Int) -> Bool { + // default: Do not prevent selection + return true + } } @@ -425,6 +436,9 @@ extension ImagePickerController: PHPhotoLibraryChangeObserver { } extension ImagePickerController : ImagePickerDelegateDelegate { + func imagePicker(delegate: ImagePickerDelegate, shouldSelectCellAt index: Int) -> Bool { + return self.delegate?.imagePicker(controller: self, shouldSelectCellAt: index) ?? true + } func imagePicker(delegate: ImagePickerDelegate, didSelectActionItemAt index: Int) { self.delegate?.imagePicker(controller: self, didSelectActionItemAt: index) diff --git a/ImagePicker/ImagePickerDelegate.swift b/ImagePicker/ImagePickerDelegate.swift index 3814e6d..60b8553 100644 --- a/ImagePicker/ImagePickerDelegate.swift +++ b/ImagePicker/ImagePickerDelegate.swift @@ -33,6 +33,9 @@ protocol ImagePickerDelegateDelegate : class { //func imagePicker(delegate: ImagePickerDelegate, didEndDisplayingAssetCell cell: ImagePickerAssetCell) func imagePicker(delegate: ImagePickerDelegate, didScroll scrollView: UIScrollView) + + // Called before selection happens + func imagePicker(delegate: ImagePickerDelegate, shouldSelectCellAt index: Int) -> Bool } final class ImagePickerDelegate : NSObject, UICollectionViewDelegateFlowLayout { @@ -67,6 +70,7 @@ final class ImagePickerDelegate : NSObject, UICollectionViewDelegateFlowLayout { } func collectionView(_ collectionView: UICollectionView, shouldSelectItemAt indexPath: IndexPath) -> Bool { + guard delegate?.imagePicker(delegate: self, shouldSelectCellAt: indexPath.item) ?? true else { return false } guard let configuration = layout?.configuration else { return false } return selectionPolicy.shouldSelectItem(atSection: indexPath.section, layoutConfiguration: configuration) }