美文网首页
2018-03-27 fixBUG 记录 hitTest不是万能

2018-03-27 fixBUG 记录 hitTest不是万能

作者: 杨柳小易 | 来源:发表于2018-03-27 15:48 被阅读14次

fix bug记录 乱用响应连的问题。

测试报了一个bug,点击tableView的空白区域会触发正常的点击事件。

tableView 展示的是用户的聊天信息,如下图所示。


IMG_0614.PNG

右边出现的用户信息,就是点击某个cell所触发的,那为什么点击空白区会有这个问题呢?

最后发现是点击今日热播的下面的某一条,tableView的dataSource就会变化。然后再点击刚才有过数据的cell的位置就会引起响应。好奇之下看了看实现代码。

这里居然是在hitTest上做的事情。具体实现如下。

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
    CGPoint hitPoint = [self.chatRoomView convertPoint:point fromView:self];
    
    if ([self.chatRoomView pointInside:hitPoint withEvent:event]) {
        [self bgImageViewActionWithTapGestureRecognizer:nil];
    }
    return [super hitTest:point withEvent:event];
}

实现了tableViewCell的hittest方法,然后tableView的父类也实现了 hittest 方法。

猜测可能在tableView reload完成的时候,tableViewCell 还停留在原来的位置(某些版本??)

使用比较low的方法修改了一下

-(void)bgImageViewActionWithTapGestureRecognizer:(UITapGestureRecognizer *)tapGestureRecognizer {
    UITableView *superView = (UITableView*)self;
    while (!superView || ![superView isKindOfClass:[UITableView class]]) {
        superView = (UITableView *)superView.superview;
    }
    if (!superView) return;
    NSIndexPath *indexPath = [superView indexPathForCell:self];
    if (indexPath && indexPath.row != NSNotFound) {
        [[NSNotificationCenter defaultCenter] postNotificationName:ptv_notificationNameCardShowKey object:self.data];
    } 
}

判断一下indexPath吧。。

终极问题
一个简单的点击事件,为什么要重写hitTest??还有,为什么要发通知呢,what ever,

相关文章

网友评论

      本文标题:2018-03-27 fixBUG 记录 hitTest不是万能

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