从集合视图中删除项目



我目前创建了一个图像数组 [1 - 8]。我还创建了一个集合视图,它将图像从 imageArray 中提取出来,并将图像放在单元格中的图像视图中。请注意,该单元格中有一个图像视图,它占据了整个屏幕,水平滚动和分页都已启用。

现在使用我当前的代码,当前发生的事情非常奇怪,所以我会告诉你当前发生了什么。所以当前正在发生的事情(我用图像 1 哪个索引 0)如果图像在 2(索引 1)上,然后你在 3(索引 2)旁边滑动,它会跳过图像 3(索引 2)和 4(索引 3)并位于图像 5(索引 4),所以当我的意思是跳过时,我的意思是它会滑过您刚刚滑动到的图像和另一个。

(奇怪的是,它会在 5 上删除图像 1 和 2)。我相信这是由于它正在更新索引或再次将其设置为 2,因为它刚刚删除了 0。我知道这可能很难获得,但只要想想带有分页的滚动视图,当您滑动到第三张图像时,它会跳过您的图像和另一张图像,并将您滑动到图像 5 的位置。

到目前为止,多亏了你们中的一些人,我在下面想出了这段代码,但我希望有人能够解决这个可怕的混乱。

var currentImage = 0
func scrollViewDidScroll(_ scrollView: UIScrollView) {
let x = floor(myCollectionView.contentOffset.x / view.frame.width)
if Int(x) != currentImage {
currentImage = Int(x)
}
if currentImage > 1 {
for collectionCell in myCollectionView.visibleCells  as [UICollectionViewCell]  {
let visibleCells = myCollectionView.visibleCells
if visibleCells.first != nil {
if let indexPath = myCollectionView.indexPath(for: collectionCell as UICollectionViewCell) {
let indexPathOfLastItem = (indexPath.item) - 1
let indexPathOfItemToDelete = IndexPath(item: (indexPathOfLastItem), section: 0)
imageArray.remove(at: (indexPath.item) - 1)
myCollectionView.deleteItems(at: [indexPathOfItemToDelete])
}
}
}
}
}

这些代码将使用项目索引删除特定项目。这工作得很好!

func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
var visibleRect = CGRect()
visibleRect.origin = myCollectionView.contentOffset
visibleRect.size = myCollectionView.bounds.size
let visiblePoint = CGPoint(x: visibleRect.midX, y: visibleRect.midY)
let visibleIndexPath: IndexPath = myCollectionView.indexPathForItem(at: visiblePoint)!
print(visibleIndexPath)
fruitArray.remove(at: visibleIndexPath.row )
myCollectionView.deleteItems(at: [visibleIndexPath])
myCollectionView.scrollToItem(at: IndexPath.init(row: visibleIndexPath.row-1, section: 0), at: UICollectionViewScrollPosition.centeredHorizontally, animated: false)
}

使用 scrollViewDidEndDragging 检测用户何时停止滚动并删除单元格,..

目标C

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {
// if decelerating, let scrollViewDidEndDecelerating: handle it
if (decelerate == NO) {
[self deleteCell];
}
}
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
[self deleteCell];
}
- (void)deleteCell {
NSIndexPath *pathForCenterCell = [self.tableView indexPathForRowAtPoint:CGPointMake(CGRectGetMidX(self.tableView.bounds), CGRectGetMidY(self.tableView.bounds))]; // if you want middle cell
NSIndexPath *firstVisibleIndexPath = [[self.tableView indexPathsForVisibleRows] objectAtIndex:0]; // if you want first visible cell
NSIndexPath *lastVisibleIndexPath = [[self.tableView indexPathsForVisibleRows] objectAtIndex:[self.tableView indexPathsForVisibleRows].count];   // last cell in visible cells

myCollectionView.beginUpdates() //if you are performing more than one operation use this 
yourImage.removeObjectAtIndex(myNSIndexPath.row)
myCollectionView.deleteItems(at: [lastVisibleIndexPath])
myCollectionView.endUpdates() 

}

斯威夫特 3.0

func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
// if decelerating, let scrollViewDidEndDecelerating: handle it
if decelerate == false {
deleteCell()
}
}
func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
deleteCell()
}
func deleteCell() {
var pathForCenterCell: IndexPath? = tableView.indexPathForRow(at: CGPoint(x: CGFloat(tableView.bounds.midX), y: CGFloat(tableView.bounds.midY)))
// if you want middle cell
var firstVisibleIndexPath: IndexPath? = (tableView.indexPathsForVisibleRows?[0] as? IndexPath)
// if you want first visible cell
var lastVisibleIndexPath: IndexPath? = (tableView.indexPathsForVisibleRows?[tableView.indexPathsForVisibleRows?.count] as? IndexPath)
// last cell in visible cells
myCollectionView.beginUpdates()()
//if you are performing more than one operation use this 
yourImage.removeObjectAtIndex(myNSIndexPath.row)
myCollectionView.deleteItems
}

快乐编码

相关内容

  • 没有找到相关文章