2013-05-07 88 views
3

我在UITableView的单元格内创建了一个自定义下拉菜单,将此菜单添加为单元格内容视图的子视图。TouchesBegin作为UITableViewCell的子视图在UIView中未触发

当我单击单元格内的菜单时,我放大视图以显示所有菜单项:现在菜单视图位于tableView和所有单元格之上。

因此,当我选择我的自定义视图中的项目时,TouchesBegan只会触发在UITableView单元格中的部分视图,而在我调用该菜单的UITableView单元格中并非在所有放大的视图中。

如果我触摸部分位于另一个单元格上的视图,TouchesBegan会在表视图的单元格中触发它,而不是在所有单元格顶部的视图中触发。

有什么建议吗?

回答

0

视图通常不会响应视图上的触摸事件或其边界外绘制的视图部分。有几个可能的方案来解决该问题:

  • 放大单元格时下拉菜单可见,以适应整个菜单,但是这可能取决于你的设计在视觉效果产生负面影响。

  • 在控制器上添加菜单而不是单元格视图。如果您有此路线,则可以使用表格视图中的UIScrollViewDelegate事件在用户滚动表格时重新定位菜单。请记住,如果菜单显示在最后一个单元格上,并且如果总是向下绘制,可能会透支控制器的边界。

  • 覆盖hitTest:withEvent:pointInside:withEvent在您的菜单视图和它的超级视图上,以通知操作系统即使在正常界限之外也响应事件。

+0

我已暂时解决您提出的第一个解决方案。我尝试了重写hitTest和pointInsid,但每次触摸视图时我都在另一个单元格中的另一个菜单上放大,系统触发histTest在我放大视图下的视图中。 – user2208094 2013-05-09 09:57:43

+0

你可以发布你的更新实施? – jszumski 2013-05-10 12:58:49

0

以下为我工作:

子类的电池并连接布局与细胞根视图:

细胞
@interface CustomCell : UITableViewCell 

@property (weak, nonatomic) IBOutlet UIView *rootView; 

@end 

覆盖则hitTest这样的:

@implementation CustomCell 

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event { 
    BOOL res = [self.rootView pointInside:point withEvent:event]; 
    if(res){ 
     return [self.rootView hitTest:point withEvent:event]; 
    } 
    return [super hitTest:point withEvent:event]; 
} 

@end 

现在touchesBegin/Move/End/Cancel将被传递到视图并且它的层次结构只要触发h是在该视图内

相关问题