android技术

iOS长按手势列表拖拽功能实现

2021-10-26  本文已影响0人  奔跑的小蚂蚁_8b28

项目开发中遇到拖拽功能的需求,具体要求是在编辑状态下,首页底部菜单项可以拖动位置,便于位置切换。遇到问题后的初步想法是添加拖拽手势,拖拽到某个位置,判断拖拽cell的中心点是否在另一个cell内,这样处理比较复杂,需要自己计算坐标。后经一同事推荐,找到了一个更简单的解决方案,代码如下。

image

//1、给cell添加长按手势,在编辑状态下可用,非编辑状态下不可用

-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{

CCNewMoreMenuCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:CCNewMoreMenuCellIdentifier forIndexPath:indexPath];

CCHighSeasPoolManager *seas=[CCHighSeasPoolManager sharedManager];

//添加长按手势

UILongPressGestureRecognizer *longPressGesture = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPressAction:)];

[cell addGestureRecognizer:longPressGesture];

if (seas.isEdit) {

    [cell.btnDelete setHidden:NO];

    [cell.imageDelete setHidden:NO];

    [cell.btnMenu setHidden:YES];

    longPressGesture.cancelsTouchesInView=YES;

    //编辑状态开启手势

    longPressGesture.enabled=YES;

}else{

    [cell.btnDelete setHidden:YES];

    [cell.imageDelete setHidden:YES];

    [cell.btnMenu setHidden:NO];

    //非编辑状态禁用手势

    longPressGesture.enabled=NO;

}

[cell.btnMenu addTarget:self action:@selector(btnMenuAction:) forControlEvents:UIControlEventTouchDown];

cell.btnMenu.btnRow=indexPath.item;

[cell.btnDelete addTarget:self action:@selector(btnDeleteAction:) forControlEvents:UIControlEventTouchDown];

cell.btnDelete.btnRow=indexPath.item;

CCMoreListModel *model = [seas.dataList objectAtIndex:indexPath.item];

cell.headerModel=model;

return cell;

}

//2、添加长按手势处理方法

}

//3、监测可移动状态

}

//4、通过系统的移动代理,交换拖动菜单项

}

上一篇 下一篇

猜你喜欢

热点阅读