扣丁学堂iOS培训之UITableView自定义右滑删除的实现代码

2018-07-20 13:25:15 2514浏览

今天扣丁学堂给大家主要介绍了iOS培训之UITableView自定义右滑删除的代码实现,首先这个项目工程只是提供一种思路,应对场景是需要自定义左滑删除按钮的样式,因为项目本身并不是修改系统的左滑删除,而是自定义实现,所以任何样式都算使用。下面我们一起来看一下吧。



下面先说下项目的结构类型



最底下自然是uitableviewCell然后放入一个scrollview填满整个cell(若想有左右间隔,也可以不填满)

scrollview中放入一个uiview和scrollview宽高相等作为内容视图。界面的所有控件视图都添加到这个uiview中!!!右边就是自定义的删除按钮也添加到scrollview中。这样就能实现滑动效果了。(你也可以加2个按钮,3个按钮,随你开心)

下面讲下代码
  
  //设置代理
  -(void)awakeFromNib{
  [superawakeFromNib];
  self.myScrollView.delegate=self;
  }
  -(void)scrollViewWillBeginDragging:(UIScrollView*)scrollView{
  [selfdidBeginMove];
  }
  -(void)scrollViewDidEndDragging:(UIScrollView*)scrollViewwillDecelerate:(BOOL)decelerate{
  [scrollViewsetContentOffset:scrollView.contentOffsetanimated:YES];
  [selfscrollViewDidEnd:scrollView];
  }
  -(void)scrollViewDidScroll:(UIScrollView*)scrollView{
  CGPointoffset=scrollView.contentOffset;
  //左边不弹性
  if(offset.x<0){
  offset.x=0;
  [scrollViewsetContentOffset:offsetanimated:NO];
  }
  }
  -(void)scrollViewWillBeginDecelerating:(UIScrollView*)scrollView{
  NSLog(@"beginbegin");
  [scrollViewsetContentOffset:scrollView.contentOffsetanimated:NO];
  [selfscrollViewDidEnd:scrollView];
  }
  -(void)scrollViewDidEnd:(UIScrollView*)scrollView{
  [scrollViewsetContentOffset:scrollView.contentOffsetanimated:YES];
  CGPointpoint=scrollView.contentOffset;
  if(point.x>DELETEWIDTH/2){
  self.deleteLeftLayout.constant=-3;
  [UIViewanimateWithDuration:0.3animations:^{
  [selflayoutIfNeeded];
  }];
  [scrollViewsetContentOffset:CGPointMake(DELETEWIDTH-3,0)animated:YES];
  self.detailView.layer.cornerRadius=0;
  }else{
  self.deleteLeftLayout.constant=0;
  [selflayoutIfNeeded];
  [scrollViewsetContentOffset:CGPointMake(0,0)animated:YES];
  self.detailView.layer.cornerRadius=5;
  }
  }
  -(void)didBeginMove{
  if(self.tableview){
  MyTableViewCell*currentCell=objc_getAssociatedObject(self.tableview,@"currentCell");
  if(currentCell!=self&&currentCell!=nil){
  [currentCellhideButtonsWithAnimation];
  }
  objc_setAssociatedObject(self.tableview,@"currentCell",self,OBJC_ASSOCIATION_ASSIGN);
  }
  }
  -(void)hideButtonsWithAnimation{
  [self.myScrollViewsetContentOffset:CGPointMake(0,0)animated:YES];
  self.detailView.layer.cornerRadius=5;
  self.deleteLeftLayout.constant=0;
  [selflayoutIfNeeded];
  }

代码意思大致是,scrollview停止滚动时,根据最后的位置判断是否显示删除按钮。

这样已经实现了左右拖拽,弹出关系效果了。接下来就有一些细节部分需要注意。

1.我们观察到,uitableviewcell只会出现一个删除,当tableView滚动,或另一个cell左滑删除时,前一个cell需要关闭。下面是我的解决方案

首先,当tableviewcell里的scrollview开始拖拽时,将当前的cell和tableview关联起来。并关闭之前关联的cell

  -(void)didBeginMove{
  if(self.tableview){
  MyTableViewCell*currentCell=objc_getAssociatedObject(self.tableview,@"currentCell");
  if(currentCell!=self&&currentCell!=nil){
  [currentCellhideButtonsWithAnimation];
  }
  objc_setAssociatedObject(self.tableview,@"currentCell",self,OBJC_ASSOCIATION_ASSIGN);
  }
  }

然后到tableview的代理中(注意是tableview,不是cell中的scrollview)当tableview准备滚动,就直接关闭掉他关联的cell。

  -(void)scrollViewWillBeginDragging:(UIScrollView*)scrollView{
  MyTableViewCell*currentCell=objc_getAssociatedObject(self.tableView,@"currentCell");
  if(currentCell!=nil){
  [currentCellhideButtonsWithAnimation];
  }
  }

代码修正过一版,之前那版有点小bug。

当cell点击时,如果处于编辑状态,就先关闭编辑状态。我的做法是直接在内容view中添加点击手势(同时完成点击事件的代理),然后内部属性判断是否处于编辑状态。

以上就是关于扣丁学堂iOS培训之UITableView自定义右滑删除的实现代码详解,希望可以帮助到同学们,扣丁学堂就是iOS视频教程的集合地,这里有iOS视频教程入门到高级的全部视频,可以供学员免费学习,不收取任何费用的哦!如果你想学习iOS的话,那就行动吧。

标签: iOS培训 iOS学习视频 iOS视频教程
微信
微博
15311698296

全国免费咨询热线

邮箱:codingke@1000phone.com

官方群:148715490

北京千锋互联科技有限公司版权所有   北京市海淀区宝盛北里西区28号中关村智诚科创大厦4层
京ICP备12003911号-6   Copyright © 2013 - 2019
返回顶部 返回顶部