iOS collectionview 拖拽

首先给collectionview添加长按方法

UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handlelongGesture:)];

 [self.issueCollectionView addGestureRecognizer:longPress];

 

#pragma mark 长按响应方法

- (void)handlelongGesture:(UILongPressGestureRecognizer *)longPress {

    [self action:longPress];

}

- (void)action:(UILongPressGestureRecognizer *)longPress {

    switch (longPress.state) {

        case UIGestureRecognizerStateBegan:

            {

                //手势开始

                //判断手势落点位置是否在row上

                NSIndexPath *indexPath = [self.issueCollectionView indexPathForItemAtPoint:[longPress locationInView:self.issueCollectionView]];

                if (indexPath == nil || indexPath.row >= self.arrayList.count) {

                    break;

                }

                IssueCollectionViewCell *cell = (IssueCollectionViewCell *)[self.issueCollectionView cellForItemAtIndexPath:indexPath];

                [self.issueCollectionView bringSubviewToFront:cell];

                //iOS9 方法 移动cell

                [self.issueCollectionView beginInteractiveMovementForItemAtIndexPath:indexPath];

            }

            break;

        case UIGestureRecognizerStateChanged:

            {

                //iOS9 方法 移动过程中随时更新cell位置

                [self.issueCollectionView updateInteractiveMovementTargetPosition:[longPress locationInView:self.issueCollectionView]];

            }

            break;

        case UIGestureRecognizerStateEnded:

            {

                //手势结束

                //iOS9方法 移动结束后关闭cell移动

                [self.issueCollectionView endInteractiveMovement];

            }

            break;

        default:

            [self.issueCollectionView cancelInteractiveMovement];

            break;

    }

}

之后对拖拽后的数据位置进行排序

//开启collectionView可以移动

- (BOOL)collectionView:(UICollectionView *)collectionView canMoveItemAtIndexPath:(NSIndexPath *)indexPath {

    return YES;

}

//处理collectionView移动过程中的数据操作

- (void)collectionView:(UICollectionView *)collectionView moveItemAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath {

    //取出移动row 数据

    FXEComObject *childCom = self.arrayList[sourceIndexPath.row];

    //从数据源中移除该数据

    [self.arrayList removeObject:childCom];

    

    if (destinationIndexPath.row >= self.arrayList.count) {

        [self.arrayList insertObject:childCom atIndex:destinationIndexPath.row - 1];

    } else {

        //将数据插入到数据源中目标位置

        [self.arrayList insertObject:childCom atIndex:destinationIndexPath.row];

    }

    [UIView performWithoutAnimation:^{

        [self.issueCollectionView reloadSections:[NSIndexSet indexSetWithIndex:0]];

    }];

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
iOSCollectionView是一种强大的界面展示控件,它允许我们展示多个横向或纵向滚动的项。而Section Header是CollectionView中的一个重要组成部分,它可以用来展示每个分区的标题或其他相关信息。 在iOS中使用CollectionView的时候,我们可以通过实现UICollectionViewDelegateFlowLayout协议来设置每个分区的大小、间距等布局属性。而Section Header则需要通过实现UICollectionViewDelegate的collectionView:viewForSupplementaryElementOfKind:atIndexPath:方法来自定义。 首先,我们需要创建一个UICollectionReusableView类的子类作为Section Header的视图。然后,在collectionView:viewForSupplementaryElementOfKind:atIndexPath:方法中,我们需要判断elementKind是否为UICollectionElementKindSectionHeader,并根据需要从重用队列中获取Section Header的视图对象。 接下来,我们可以设置Section Header的标题、背景色、字体颜色等视觉效果。例如,我们可以使用UILabel来展示标题,并通过设置UILabel的text属性来显示每个分区的标题。如果需要更加丰富的自定义效果,我们还可以使用自定义的视图来展示Section Header。 最后,我们需要在UICollectionViewFlowLayout中设置sectionHeadersPinToVisibleBounds属性为true,以便在滚动时固定Section Header的位置。这样,当用户滚动CollectionView时,Section Header会始终显示在顶部,增加了用户的使用体验。 综上所述,iOSCollectionView提供了强大的支持来展示多个滚动项,而Section Header则可以用来展示每个分区的相关信息。通过实现UICollectionViewDelegate的collectionView:viewForSupplementaryElementOfKind:atIndexPath:方法,我们可以自定义Section Header的视图,并通过UICollectionViewFlowLayout来设置其布局等属性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值