blob: e13628ef2db110a52f2dccab86e9d34252a5a7f7 [file] [log] [blame] [edit]
// Copyright 2016-present the Material Components for iOS authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#import <Foundation/Foundation.h>
/**
A delegate protocol that provides editing notifications for three types of collection view
gestural interations:
- Cells that are dragging/moved vertically for reordering.
- Individual cells being swiped horizontally for dismissal.
- Entire cell sections being swiped horizontally for dismissal.
*/
@protocol MDCCollectionViewEditingDelegate <NSObject>
@optional
#pragma mark - CollectionView Item Editing
/**
If YES, the collectionView will allow editing of its items. Permissions for individual
index paths are set by implementing the delegate -collectionView:canEditItemAtIndexPath method.
If not implemented, will default to NO.
*/
- (BOOL)collectionViewAllowsEditing:(nonnull UICollectionView *)collectionView;
/**
Sent to the receiver when the collection view will begin editing. Typically this method will be
called from a collection view editor that has had its editing property set to YES.
This will be called before any animations to editing state will begin.
@param collectionView The collection view.
*/
- (void)collectionViewWillBeginEditing:(nonnull UICollectionView *)collectionView;
/**
Sent to the receiver when the collection view did begin editing. Typically this method will be
called from a collection view editor that has had its editing property set to YES.
This is called after animations to editing state have completed.
@param collectionView The collection view.
*/
- (void)collectionViewDidBeginEditing:(nonnull UICollectionView *)collectionView;
/**
Sent to the receiver when the collection view will end editing. Typically this method will be
called from a collection view editor that has had its editing property set to NO.
This will be called before any animations from editing state begin.
@param collectionView The collection view.
*/
- (void)collectionViewWillEndEditing:(nonnull UICollectionView *)collectionView;
/**
Sent to the receiver when the collection view did end editing. Typically this method will be
called from a collection view editor that has had its editing property set to NO.
This is called after animations from editing state have completed.
@param collectionView The collection view.
*/
- (void)collectionViewDidEndEditing:(nonnull UICollectionView *)collectionView;
/**
Sent to the receiver for permission to edit an item at this collection view index path.
Returning NO here will prevent editing the designated index path. If not implemented, will
default to NO.
@param collectionView The collection view.
@param indexPath The index path of the collection view.
@return if the collection view index path can be edited.
*/
- (BOOL)collectionView:(nonnull UICollectionView *)collectionView
canEditItemAtIndexPath:(nonnull NSIndexPath *)indexPath;
/**
Sent to the receiver for permission to select an item at this collection view index path
during collection view editing. Returning NO here will prevent selecting the designated
index path. If not implemented, will default to NO.
@param collectionView The collection view.
@param indexPath The index path of the collection view.
@return if the collection view index path can be selected.
*/
- (BOOL)collectionView:(nonnull UICollectionView *)collectionView
canSelectItemDuringEditingAtIndexPath:(nonnull NSIndexPath *)indexPath;
#pragma mark - CollectionView Item Moving
/**
If YES, the collectionView will allow reordering of its items. Permissions for individual
index paths are be set by the -collectionView:canMoveItemAtIndexPath and/or the
-collectionView:canMoveItemAtIndexPath:toIndexPath methods. If not implemented, will default
to NO.
*/
- (BOOL)collectionViewAllowsReordering:(nonnull UICollectionView *)collectionView;
/**
Sent to the receiver for permission to move an item at this collection view index path.
Returning NO here will prevent moving the designated index path. If not implemented, will
default to NO.
@param collectionView The collection view.
@param indexPath The index path of the collection view.
@return if the collection view index path can be moved.
*/
- (BOOL)collectionView:(nonnull UICollectionView *)collectionView
canMoveItemAtIndexPath:(nonnull NSIndexPath *)indexPath;
/**
Sent to the receiver for permission to move an item at this collection view index path to
a new index path. Returning NO here will prevent moving the designated index path. If not
implemented, will default to NO.
@param collectionView The collection view.
@param indexPath The current index path of the collection view.
@param newIndexPath The propsed new index path of the collection view.
@return if the collection view index path can be moved.
*/
- (BOOL)collectionView:(nonnull UICollectionView *)collectionView
canMoveItemAtIndexPath:(nonnull NSIndexPath *)indexPath
toIndexPath:(nonnull NSIndexPath *)newIndexPath;
/**
Sent to the receiver when the collection view will move an item from its previous index path
to the new index path.
@param collectionView The collection view.
@param indexPath The previous index path of the collection view.
@param newIndexPath The new index path of the collection view.
*/
- (void)collectionView:(nonnull UICollectionView *)collectionView
willMoveItemAtIndexPath:(nonnull NSIndexPath *)indexPath
toIndexPath:(nonnull NSIndexPath *)newIndexPath;
/**
Sent to the receiver when the collection view did move an item from its previous index path
to the new index path.
@param collectionView The collection view.
@param indexPath The previous index path of the collection view.
@param newIndexPath The new index path of the collection view.
*/
- (void)collectionView:(nonnull UICollectionView *)collectionView
didMoveItemAtIndexPath:(nonnull NSIndexPath *)indexPath
toIndexPath:(nonnull NSIndexPath *)newIndexPath;
/**
Sent to the receiver when a collection view item at specified index path will begin dragging.
@param collectionView The collection view.
@param indexPath The index path of the collection view.
*/
- (void)collectionView:(nonnull UICollectionView *)collectionView
willBeginDraggingItemAtIndexPath:(nonnull NSIndexPath *)indexPath;
/**
Sent to the receiver when a collection view item at specified index path has finished dragging.
@param collectionView The collection view.
@param indexPath The index path of the collection view.
*/
- (void)collectionView:(nonnull UICollectionView *)collectionView
didEndDraggingItemAtIndexPath:(nonnull NSIndexPath *)indexPath;
#pragma mark - CollectionView Item Deletions
/**
Sent to the receiver when an array of index paths will be deleted from the collection view.
@param collectionView The collection view.
@param indexPaths An array of index paths to be deleted from the collection view.
*/
- (void)collectionView:(nonnull UICollectionView *)collectionView
willDeleteItemsAtIndexPaths:(nonnull NSArray<NSIndexPath *> *)indexPaths;
/**
Sent to the receiver after an array of index paths did get deleted from the collection view.
@param collectionView The collection view.
@param indexPaths An array of index paths deleted from the collection view.
*/
- (void)collectionView:(nonnull UICollectionView *)collectionView
didDeleteItemsAtIndexPaths:(nonnull NSArray<NSIndexPath *> *)indexPaths;
#pragma mark - CollectionView Section Deletions
/**
Sent to the receiver when an array of index paths will be deleted from the collection view.
@param collectionView The collection view.
@param sections An index set of sections to deleted from the collection view.
*/
- (void)collectionView:(nonnull UICollectionView *)collectionView
willDeleteSections:(nonnull NSIndexSet *)sections;
/**
Sent to the receiver after an array of index paths did get deleted from the collection view.
@param collectionView The collection view.
@param sections An index set of sections deleted from the collection view.
*/
- (void)collectionView:(nonnull UICollectionView *)collectionView
didDeleteSections:(nonnull NSIndexSet *)sections;
#pragma mark - CollectionView Swipe To Dismiss Items
/**
If YES, the collectionView will allow swiping to dismiss an item. If allowed, swiping is enabled
for all items (excluding headers, and footers). Permissions for individual items can be set by
implementing the protocol -collectionView:canSwipeToDismissItemAtIndexPath method. If not
implemented, will default to NO.
@param collectionView The collection view being swiped for dismissal.
@return if the collection view can swipe to dismiss an item.
*/
- (BOOL)collectionViewAllowsSwipeToDismissItem:(nonnull UICollectionView *)collectionView;
/**
Sent to the receiver when a collection view index path begins to swipe for dismissal. The
delegate method -collectionViewAllowsSwipeToDismissItem must return true in order for this
subsequent delegate method to be called. The collection view is NOT required to be in
edit mode to allow swipe-to-dismiss items. Returning NO here will prevent swiping the
designated item at index path. If not implemented, will default to NO.
@param collectionView The collection view being swiped for dismissal.
@param indexPath The index path of the collection view being swiped for dismissal.
@return if the collection view index path can be swiped for dismissal.
*/
- (BOOL)collectionView:(nonnull UICollectionView *)collectionView
canSwipeToDismissItemAtIndexPath:(nonnull NSIndexPath *)indexPath;
/**
Sent to the receiver when a collection view index path begins to swipe for dismissal. The
delegate method -collectionViewAllowsSwipeToDismissItem must return true in order for this
subsequent delegate method to be called. The collection view is NOT required to be in
edit mode to allow swipe-to-dismiss items. If only one swiping direction should be allowed, this
method should return YES when the swiping direction is the allowed one. Returning NO here will
prevent swiping the designated item at index path. If not implemented, will default to NO.
@param collectionView The collection view being swiped for dismissal.
@param swipeDirection The direction the user swiped for dismissal.
@param indexPath The index path of the collection view being swiped for dismissal.
@return if the collection view index path can be swiped for dismissal.
*/
- (BOOL)collectionView:(nonnull UICollectionView *)collectionView
canSwipeInDirection:(UISwipeGestureRecognizerDirection)swipeDirection
toDismissItemAtIndexPath:(nonnull NSIndexPath *)indexPath;
/**
Sent to the receiver when the collection view index path begins to swipe for dismissal.
@param collectionView The collection view being swiped for dismissal.
@param indexPath The index path of the collection view being swiped for dismissal.
*/
- (void)collectionView:(nonnull UICollectionView *)collectionView
willBeginSwipeToDismissItemAtIndexPath:(nonnull NSIndexPath *)indexPath;
/**
Sent to the receiver after the collection view item has been dismissed.
@param collectionView The collection view being swiped for dismissal.
@param indexPath The index path of the collection view being swiped for dismissal.
*/
- (void)collectionView:(nonnull UICollectionView *)collectionView
didEndSwipeToDismissItemAtIndexPath:(nonnull NSIndexPath *)indexPath;
/**
Sent to the receiver when the collection view index path has reset without being dismissed.
@param collectionView The collection view being swiped for dismissal.
@param indexPath The index path of the collection view being swiped for dismissal.
*/
- (void)collectionView:(nonnull UICollectionView *)collectionView
didCancelSwipeToDismissItemAtIndexPath:(nonnull NSIndexPath *)indexPath;
#pragma mark - CollectionView Swipe To Dismiss Sections
/**
If YES, the collectionView will allow swiping to dismiss a section. If allowed, swiping is enabled
for all section items, headers, and footers. Permissions for individual sections can be
set by implementing the protocol -collectionView:canSwipeToDismissSection method. If not
implemented, will default to NO.
@param collectionView The collection view being swiped for dismissal.
@return if the collection view can swipe to dismiss a section.
*/
- (BOOL)collectionViewAllowsSwipeToDismissSection:(nonnull UICollectionView *)collectionView;
/**
Sent to the receiver when a collection view section begins to swipe for dismissal. The
collection view property @c allowsSwipeToDismissSection must be true in order for this
subsequent delegate method to be called. The collection view is NOT required to be in
edit mode to allow swipe-to-dismiss sections. Returning NO here will prevent swiping the
designated section. If not implemented, will default to NO.
@param collectionView The collection view being swiped for dismissal.
@param section The section of the collection view being swiped for dismissal.
@return if the collection view section can be swiped for dismissal.
*/
- (BOOL)collectionView:(nonnull UICollectionView *)collectionView
canSwipeToDismissSection:(NSInteger)section;
/**
Sent to the receiver when the collection view section begins to swipe for dismissal.
@param collectionView The collection view being swiped for dismissal.
@param section The section of the collection view being swiped for dismissal.
*/
- (void)collectionView:(nonnull UICollectionView *)collectionView
willBeginSwipeToDismissSection:(NSInteger)section;
/**
Sent to the receiver after the collection view section has been dismissed.
@param collectionView The collection view being swiped for dismissal.
@param section The section of the collection view being swiped for dismissal.
*/
- (void)collectionView:(nonnull UICollectionView *)collectionView
didEndSwipeToDismissSection:(NSInteger)section;
/**
Sent to the receiver when the collection view section has reset without being dismissed.
@param collectionView The collection view being swiped for dismissal.
@param section The section of the collection view being swiped for dismissal.
*/
- (void)collectionView:(nonnull UICollectionView *)collectionView
didCancelSwipeToDismissSection:(NSInteger)section;
@end