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,