美文网首页
20190719问题总结

20190719问题总结

作者: 陈大帅 | 来源:发表于2019-07-19 11:21 被阅读0次

    问题一:

    在我的工程中,label只是设置了userInteractionEnabled为yes,但没有添加tap点击手势。但是在把label添加到cell上时,点击label却不响应cell:

    之前我以为把cell上的label设置userInteractionEnabled为yes时,就算不添加tap点击手势,当点击label时都不会响应父视图cell,因为在我的工程中一直都是这样。
    但是最近看了另一个demo中label的userInteractionEnabled就算设置为yes,但是只要不添加tap手势,你点击lable时,还是会响应cell。

    这让我百思不得其解,我不知道哪个是正常的,然后我又自己写了个demo,发现,果然label的userInteractionEnabled就算设置为yes,但是只要不添加tap手势,你点击lable时,点击动作还是会作用到label 的父视图上的,因为点击的传递是:当子视图不能响应点击事件时,就会传递给父视图响应。然后我给lable上加了longPress手势,然后再单击label,这时新写的demo中的label还是不会响应单击,而是会作用在父视图上。但是当长按时,lable会响应longPress手势,这是因为在label上添加了longPress手势。

    所以综上所述,就是我的工程中的label有问题,所以才会导致只设置了userInteractionEnabled为yes,但没添加tap点击手势时也不会把点击手势传递给父视图。这个问题困扰了我好几天,最后研究发现,是因为我工程中有个lable的类别类,这个类别类中有个关键代码是这么写得:

    - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
     if (!self.isTapAction) {
            return;
        }
    }
    

    上面的代码有问题,那就是,只要label的userInteractionEnabled为yes,那么touch这个动作就不会被传递到父视图上去,因为没有调用[super touchesBegan:touches withEvent:event];

    改成:

    - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
     if (!self.isTapAction) {
            [super touchesBegan:touches withEvent:event];
        }
    }
    

    就好了。

    问题二:

    当父视图是xib创建的时,引用的子视图也会走awakeFromNib方法,而不不会走initWithFrame方法

    事情是这样的:视图中的cell是xib创建的,cell中的label也是xib拖的,为了给lable添加长按手势,我把cell中的label引用从UILabel换成了我自己封装的AKMLinkLabel,但是我发现,AKMLinkLabel不走init方法。后来才发现,当我把cell中的lable引用从UIlabel换为AKMLinkLabel时,其实AKMLinkLabel就是xib创建的了,所以他不会走init方法,而是会走awakeFromNib方法。

    image image image

    相关文章

      网友评论

          本文标题:20190719问题总结

          本文链接:https://www.haomeiwen.com/subject/kvjjlctx.html