代码之家  ›  专栏  ›  技术社区  ›  Sean Clark Hess

如何从uitouch中识别补漆动作

  •  3
  • Sean Clark Hess  · 技术社区  · 14 年前

    我正在制作网格视图。它对TableView进行子类化,并为每个单元格设置多个子单元格(列)。一切正常。

    现在,我需要检测何时点击单个子单元。我在网格视图中覆盖了Touchesended。我能接受吗 NSSet 属于 UITouch 物体和检测它是一个润色内部或其他一些姿态?

    我可以编写自定义代码,但很难做到完美。

    3 回复  |  直到 14 年前
        1
  •  1
  •   Cory Kilger    14 年前

    UIControlEvents 喜欢 UIControlEventTouchUpInside 用于 UIControl 物体。在一个 UIView 你需要做你自己的测试。

    现在我不知道你是如何构建你的网格视图的,或者你想要检测到什么样的触摸,但是通常你需要这样的东西。这会寻找一个单独的点击和什么细胞被点击。

    - (void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
        if ([touches count] == 1) {
            UITouch * touch = [touches anyObject];
            if ([touch tapCount] == 1) {
                // This is a simple tap
                CGPoint point = [touch locationInView:self.view];
                GridCell * cell = nil;
                for (GridCell * aCell in cells) {
                    if (CGRectContainsPoint(aCell.frame, point)) {
                        cell = aCell;
                        break;
                    }
                }
                if (cell) {
                    // The tap was inside this cell
                }
            }
    
        }
    }
    
        2
  •  0
  •   Stefan Arentz    14 年前

    假设您只支持视图中的单点触摸, touchesEnded 表示用户从视图中移除了手指。无论触摸是在视图的内部还是外部,还是视图的特定部分,都应该进行测试。

        3
  •  0
  •   Hoang Pham    14 年前

    根据我的经验,您需要为每个单元格创建自定义视图,而不是为TableView子类化以获取事件。这样,您就可以完全控制您感兴趣的所有事件。然后你可以选择把它们放在屏幕上,这并不难实现。

    但如果有的话,让我们看看别人的答案;)