touchesBegin 在自定义 UITableViewCell,touchesEnded 在 UIView

Posted

技术标签:

【中文标题】touchesBegin 在自定义 UITableViewCell,touchesEnded 在 UIView【英文标题】:touchesBegan in custom UITableViewCell, touchesEnded in UIView 【发布时间】:2013-04-19 17:04:32 【问题描述】:

我正在尝试模仿将图像从UITableView 拖放到UIView。 UITableView 和 UIView 都在同一个视图上,并排。

我的做法:

是在UITableView 中触发touchesBegan 事件(即当触摸/选择一个单元格时)并在UIView 中结束触摸时触发touchesEnded 事件。

问题:

所以我创建了一个自定义UITableViewCell,其中包含一个UIImageView 和几个UILabels。我为此UIImageView 设置了User Interaction Enabled。然后为了接收touchesBegan 事件,我确实覆盖了自定义UITableViewCell 类中的touchesBegan 方法;现在我可以从单元格接收touchesBegan 事件。

问题是

当触摸在UIView 上结束时,我没有收到touchesEnded 事件。请注意,我已经在视图控制器类中实现了touchesEnded 方法(不是在自定义类中);如果我在这个UIView 中开始和停止触摸,我会看到touchesEnded 被解雇。

这里有什么我遗漏的吗?

使用 Xcode 4.6 (4H127),在装有 ios 6.1.3 的 iPad 2 上进行测试

【问题讨论】:

【参考方案1】:

这样就行不通了。您将需要在包含两个子视图的父视图上使用触摸方法。可以抽象地看起来像这样:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 

    if ([self touchOnCell:touches])  //check to see if your touch is in the table
        isDragging = YES;             //view cell
    


-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
    //do your dragging code here


-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 

    if (isDragging && [self touchOnDropView:touches]) 
        //do your drop code here 
    

现在,如果这不能单独工作,您可能希望在 tableView 上实现hitTest,并且如果触摸位于拖动对象的区域,则返回父视图。

希望对你有帮助

【讨论】:

以上是关于touchesBegin 在自定义 UITableViewCell,touchesEnded 在 UIView的主要内容,如果未能解决你的问题,请参考以下文章

touchesbegin, touchesmoved, touchesended 问题

Touchesbegin没有检测到被触摸的东西

UIScrollview touchesbegin,touchesmoved,touchesendactions

自定义 UIView 中的 UItable

如何在已经是 NIB 的 UICollectionViewCell 中加载带有自定义单元格的 UITable

不同屏幕的图像尺寸