zoukankan      html  css  js  c++  java
  • UIButton高亮状态卡顿

    童鞋们有么有遇到过一个tableview或者是scrollview上放置一个button然后点击button,但是button的高亮状态切换不过来呢?

    解决方案:

    新建一个类继承自UITableView或者UIScrollView,然后

    (1)tableview

    - (id)initWithFrame:(CGRect)frame style:(UITableViewStyle)style{

        if (self = [super initWithFrame:frame style:style])

        {

            self.delaysContentTouches = NO;

            

            for (id view in self.subviews)

            {

                if ([NSStringFromClass([view class]) isEqualToString:@"UITableViewWrapperView"])

                {

                    if ([view isKindOfClass:[UIScrollView class]])

                    {

                        UIScrollView * scroll = (UIScrollView *)view;

                        scroll.delaysContentTouches = NO;

                    }

                    break;

                }

            }

        }

        

        return self;

    }

    - (BOOL)touchesShouldCancelInContentView:(UIView *)view

    {

        if ([view isKindOfClass:[UIButton class]])

        {

            return YES;

        }

        return [super touchesShouldCancelInContentView:view];

    }

    (2)scrollView

    - (id)initWithFrame:(CGRect)frame{

        if (self = [super initWithFrame:frame])

        {

            self.delaysContentTouches = NO;

        }

        

        return self;

    }

    - (BOOL)touchesShouldCancelInContentView:(UIView *)view

    {

        if ([view isKindOfClass:[UIButton class]])

        {

            return YES;

        }

        return [super touchesShouldCancelInContentView:view];

    }

    如果用到tableview或者scrollView的话让他继承自这个新建的类即可。

     

    (2)扩充:

    UIScrollView:
    1、属性delaysContentTouches,布尔类型,默认值为YES。值为YES时,UIScrollView会在接收到手势时延迟150ms来判断该手势是否能够出发UIScrollView的滑动事件;值为NO时,UIScrollView会立马将接收到的手势分发到子视图上。
    (注:仅仅设置这个是不够的,你会发现如果想要拖动scrollView而起点落在其他有手势识别的视图上时会拖不动)
    2、方法- (BOOL)touchesShouldCancelInContentView:(UIView *)view,此方法的重载是帮助我们完美解决问题的重点,决定手势是否取消传递到view上,拖动ScrollView时触发。返回NO时,拖动手势将留在ScrollView上,返回YES则将手势传到view上。(若view是UIControl,则默认返回YES)

    UITableView:

    不得不说,UITableView(包括UITableViewCell在内)在iOS7和iOS8中的视图结构是不同的,且存在着很多我们在编码时永远接触不到的视图,但我们可通过Debug将其subviews逐个逐个找出来。这关系到我们这个问题坑比较深的层次。
    iOS7:UITableView中存在n+1个UIScrollView,一个是UITableView本身,另外n个存在于UITableViewCell与cell的contentView之间,类名为UITableViewCellScrollView,活的不久,仅存在于iOS7中,在iOS8中已被移除。
    iOS8:UITableView中存在2个UIScrollView,一个是UITableView本身,另外一个存在于UITableView与UITableViewCell之间,类名为UITableViewWrapperView。需要注意的是,UITableViewWrapperView在iOS7中并不是一个UIScrollView。

                                                                                                    -------------------感谢app dealloc的分享

  • 相关阅读:
    Dom元素的属性-卓有成效的使用
    我们90后的爱情
    Spring MVC 注解自学笔记(四) @Value
    Spring MVC学习笔记(三) @Resource
    Spring MVC学习笔记(二) 视图解析器 web请求六个阶段
    IntelliJ IDEA集成开发环境IDE自学之路
    Spring MVC注解学习笔记(一)
    持之以恒 技术是个漫长路
    JavaSE-note1-随机访问类RandomAccessFile
    [转]WINDOWS下VIM配置
  • 原文地址:https://www.cnblogs.com/danMing-love/p/6520187.html
Copyright © 2011-2022 走看看