1.tableView的结构的差异
我碰到的问题:在透明背景ViewA上加了一个小的tableViewB,viewA上添加了点击隐藏的手势,tableViewB点击cell触发另外的手势。但是运行发现在8上A和B都可以正常响应。但是在7.1上点击tableViewB中Cell,响应的是viewA的手势,也就是说B的cell点击事件被父视图A的tap手势屏蔽了,后来查找下发现下面的情况,
IOS6的UITableViewCell 子视图(subviews)的容器是UITableViewCellContentView IOS7的UITableViewCell 子视图(subviews)的容器是UITableViewCellScrollView 由于IOS7中添加了滑动后出现编辑按钮的操作,所以使用scrollView来处理,UITableViewCellScrollView有对触摸的相应处理,导致按钮的点击效果被屏蔽了,但是点击事件还是在的,所以可以通过在 1.设置tableView.delaysContentTouches = NO; 2.同时在(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath代理方法中对scrollview把延迟触摸设置为NO即可 for (id obj in cell.subviews) { if ([NSStringFromClass([obj class])isEqualToString:@"UITableViewCellScrollView"]) { UIScrollView *scroll = (UIScrollView *) obj; scroll.delaysContentTouches =NO; break; } }于是我就做了手势屏蔽处理
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
QLLog(@"touch.view:%@",touch.view);
if ([touch.view.superviewisKindOfClass:[UITableViewCellclass]]) {
return NO;
}elseif([touch.view.superviewisKindOfClass:[UIScrollViewclass]]){
return NO;
}else{
return YES;
}
}
这样才能在7和8上正常运行。不知道谁有没有更准确的说法,现在先这么处理了。