ios scollview 嵌套tableview,怎么识别cell的左滑手势

 我来答
兄弟连教育
2016-06-20 · 百度知道合伙人官方认证企业
兄弟连教育
兄弟连教育成立于2006年,11年来专注IT职业教育,是国内专业的IT技术培训学校。2016年成功挂牌新三板(股票代码:839467)市值过亿。开设专注程序员培训专注php、Java、UI、云计算、Python、HTML5、
向TA提问
展开全部
  scrollView在滑倒最边上(左或右)的时候,为了提醒用户已经滑到最边上了(左或右),再继续向左(右)滚动的话会有一个反弹的效果,这就造成左滑删除的时候,整个tableView会出现一个我们不想看到的反弹效果。
  解决方法:
  会出现这种效果,是因为苹果为了让用户知道scrollView已经滑到了最边上了,而不是程序卡了或者出现问题了而不能滑动。所以,scrollView对象里面有三个属性,分别是bounces,bounceHorizontally与bounceVertically三个属性,通过 self.scrollView.bounces = NO;这行代码就可以让scrollView滑倒边上的时候不会出现反弹效果。
  关键代码:
  self.scrollView.bounces = NO;

  问题2:

  当你把scrollView滑到最边上(左或右)的时候,当你继续做滑想要让cell接收左滑手势的时候,这时滑动删除的事件被底部的UIScrollview给响应了,cell根本拿不到这个滑动手势。tableView是UIScrollview 的子类,cell里面的ContentView好像在iOS7.0之后也是UIScrollview ,再加底部一个UIScrollview,这滑动手势事件该怎么传递好呢,给谁都不行啊。 给了底部,那么就没法滑动删除,给了cell那么正常的左右滑动又不行了。
  解决方法:
  首先,新建一个MyScrollView类,让其继承于UIScrollView,并且遵循UIGestureRecognizerDelegate协议。
  @interface MyScrollview : UIScrollView <UIGestureRecognizerDelegate>
  iOS的UIGestureRecognizer基类内包含 Tap(点击)、Pinch(捏合)、Rotation(旋转)、Swipe(滑动)、Pan(拖移)、LongPress(长按)这几种常用手势动作,又细分单击、双击、左滑、右滑等操作。

  然后重写下类方法:

  -(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {

  if(gestureRecognizer.state != 0) {

  return YES;

  }else {

  return NO;

  }

  重写之后让这个类绑定你界面中的scrollView.这个函数里面的意思是如果一个手势没有被识别的话,那么就让多个gestureRecognizer可以被识别,也就是本文的scrollView与tableView的cell的滑动手势可以同时被识别。
  但是这样之后,又会出现一个新的问题,也就是当scrollView在左右滑动的时候,tableView也能同时的上下滑动。造成这种现象的原因是上面MyScrollView里面重写的函数造成了多个手势同时被响应。解决这种问题的方法是在ViewController类里面处理滚动时候的事件。

  #pragma mark - ScrollView delegate

  - (void)scrollViewDidScroll:(UIScrollView *)scrollView {

  if(scrollView == self.myScrollView) {

  self.tableView1.scrollEnabled = NO;

  self.tableView2.scrollEnabled = NO;

  }

  }

  - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {

  if(scrollView == self.myScrollView) {

  self.tableView1.scrollEnabled = YES;

  self.tableView2.scrollEnabled = YES;

  }

  }

  代码的意思是当你在滑动scrollView的时候,把所有的tableView设置为不可滑动,而当scrollView滑动结束的时候,再把tableView设置为可以滑动,这样就能避免scrollView与tableView同时滑动了。
  好了,到此为止,为嵌套在scrollView里面的tableView实现滑动删除的功能所遇到的问题已经解决了。注意,这里解决的是给右边的tableView增加滑动删除,如果你的需求是给左边的tableView增加滑动删除,那么解决方案是:拿起键盘砸向产品经理。
  下面给出实现滑动删除常用到的方法。

  -(NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath {

  return @"删除";

  }

  该方法返回的是你左滑时候出现的文字提示。

  -(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {

  return UITableViewCellEditingStyleDelete;

  }

  该方法是根据indexPath返回tableView里面每一行的编辑类型。包括UITableViewCellEditingStyleDelete,UITableViewCellEditingStyleNone与UITableViewCellEditingStyleInsert.

  -(NSArray*)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath {

  UITableViewRowAction* deleteAction = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleNormal title:@"删除" handler:^(UITableViewRowAction * _Nonnull action, NSIndexPath * _Nonnull indexPath) {

  这里面写点击按钮的所响应的事件。

  }];

  return @[deleteAction];

  }

  这个函数可以创建多个action,并以数组的形势返回,使得左滑时候能够出现多个按钮。

  还有commitEditingStyle等等的函数,这里就不一一例举了。这里附上自己的gitHub地址:github.com/juncheng785245941
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式