• 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的分享

  • 相关阅读:
    构造函数+this关键字+super关键字
    封装
    数组+方法
    流程控制语句
    java运算符+引用数据类型
    java的基础安装
    mysql数据库连接
    mysql数据库约束
    mysql数据库
    练习010:按奇偶排序数组
  • 原文地址:https://www.cnblogs.com/danMing-love/p/6520187.html
Copyright © 2020-2023  润新知