如何防止多次调用 collectionView:didSelectItemAtIndexPath 委托方法
How to prevent collectionView:didSelectItemAtIndexPath delegate method called more than once
当我多次点击 UICollectionView 的一个单元格时——双击、三次点击——它的委托方法 didSelectItemAtIndexPath 也被调用不止一次。什么是最巧妙的预防方法?
如有任何意见,我将不胜感激。
这是最安全的方法objective:-
(void)collectionView:(UICollectionView *)collectionView
didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
if([[collectionView indexPathsForSelectedItems] containsObject:indexPath]) // checking whether cell is already selected or not
{
return;
}
else
{
// do whatever you want to do on selection of cell
}
}
这里发生的事情是,每当你 select 一个单元格时,它会自动存储 Collection 视图的 "indexPathsForSelectedItems",所以下次你点击 select再次编辑单元格此方法 [[collectionView indexPathsForSelectedItems] containsObject:indexPath]
将检查该单元格是否已被 select 编辑,如果是,则它将 return 该方法,以便它不会进行任何进一步的操作。
您可以使用您的模型对象在其中保存选定的 属性(或者您可以为此创建一个布尔数组)。并在 shouldSelectItemAtIndexPath 方法中检查它。
@cihangirs代码:
- (BOOL)collectionView:(UICollectionView *)collectionView shouldSelectItemAtIndexPath:(NSIndexPath *)indexPath {
if (someModel.isSelected) {
return NO;
} else {
someModel.isSelected = YES;
return YES;
}
}
当我多次点击 UICollectionView 的一个单元格时——双击、三次点击——它的委托方法 didSelectItemAtIndexPath 也被调用不止一次。什么是最巧妙的预防方法?
如有任何意见,我将不胜感激。
这是最安全的方法objective:-
(void)collectionView:(UICollectionView *)collectionView
didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
if([[collectionView indexPathsForSelectedItems] containsObject:indexPath]) // checking whether cell is already selected or not
{
return;
}
else
{
// do whatever you want to do on selection of cell
}
}
这里发生的事情是,每当你 select 一个单元格时,它会自动存储 Collection 视图的 "indexPathsForSelectedItems",所以下次你点击 select再次编辑单元格此方法 [[collectionView indexPathsForSelectedItems] containsObject:indexPath]
将检查该单元格是否已被 select 编辑,如果是,则它将 return 该方法,以便它不会进行任何进一步的操作。
您可以使用您的模型对象在其中保存选定的 属性(或者您可以为此创建一个布尔数组)。并在 shouldSelectItemAtIndexPath 方法中检查它。
@cihangirs代码:
- (BOOL)collectionView:(UICollectionView *)collectionView shouldSelectItemAtIndexPath:(NSIndexPath *)indexPath {
if (someModel.isSelected) {
return NO;
} else {
someModel.isSelected = YES;
return YES;
}
}