touchesBegan在自定义UITableViewCell中,touchesEnded在UIView中

时间:2013-04-19 17:04:33

标签: ios uitableview uiview touchesbegan

我正试图模仿从UITableViewUIView的图像拖拽。 UITableView和UIView都在同一个视图中,并排。

我的方法:

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

问题:

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

问题是

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

这里有什么我想念的吗?

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

1 个答案:

答案 0 :(得分:0)

这不会那样。您需要在包含两个子视图的父视图中使用触摸方法。可以像这样抽象地看:

-(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,如果触摸位于拖动对象的区域中,则返回父视图。

希望这会有所帮助