ios - UIControl 跟踪在不同 UIControl 上开始的触摸

标签 ios objective-c

我正在制作一个自定义 iOS 键盘,并有一个 UIControl 子类来表示我的按钮。我试图获得与普通 iOS 键盘相同的行为:

  • 用户开始触摸一个按钮
  • 用户拖动其他按钮(需要检测到这一点,以便他们可以相应地突出/取消突出显示)
  • 当用户抬起手指时记录实际的键盘“按下”;即触摸结束

  • 我正在使用这样的触摸跟踪方法进行测试:
    - (BOOL)beginTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event
    {
        [super beginTrackingWithTouch:touch withEvent:event];
        NSLog(@"Begin for %@", [self label]);
        return YES;
    }
    
    - (BOOL)continueTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event
    {
        [super continueTrackingWithTouch:touch withEvent:event];
        NSLog(@"Continue for %@", [self label]);
        return YES;
    }
    
    - (void)endTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event
    {
        [super endTrackingWithTouch:touch withEvent:event];
        NSLog(@"End for %@", [self label]);
    }
    

    这些方法都被调用,除了它们只在触摸开始的 UIControl 上被调用。

    识别在我的所有按钮上来来往往的触摸的最佳方式是什么?我必须通过父 View 完成所有操作吗?

    最佳答案

    如果提供,我会选择一个更好的答案......但如果有人通过搜索找到这个,我已经设法通过这种方式得到我需要的东西:

  • 设置 userInteractionEnabledNO对于按钮类(UIControl 子类)
  • 不要覆盖按钮类中的任何触摸方法
  • 实现touchesBegan:withEvent: , touchesMoved:withEvent:touchesEnded:withEvent:在 View Controller 中
  • 在每个事件上,从 UITouch 对象中提取位置
  • 遍历所有按钮 subview 并找到包含触摸位置的 subview :
    - (MyButton *)buttonForTouch:(UITouch *)touch
    {
        CGPoint windowLocation = [touch locationInView:keyboardView];
        for (MyButton *button in buttons) {
            if (CGRectContainsPoint([button frame], windowLocation)) {
                return button;
            }
        }
        return nil;
    }
    
  • 确定用户正在与哪个按钮交互后,让 View Controller 向相关按钮发送消息以调整其外观
  • 如果合适,请在 touchesBegan:withEvent: 中保留对 UITouch 实例的引用。所以你可以确定你在其他方法中跟踪的是同一个
  • 关于ios - UIControl 跟踪在不同 UIControl 上开始的触摸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26190857/

    相关文章:

    ios - 切换方向时如何正确定位我的 ScrollView 图像?

    ios - UICollectionView 和补充 View 崩溃

    iphone - iOS:预计算 UITableView 的行高

    iphone - 无法更改 UIButton 的图像

    ios - fabric.io 即使在上传后也缺少 dSYM

    ios - xcodebuild:错误:名为 "myWorkspace"的工作空间不包含名为

    ios - iOS-快速创建未签名的字符

    ios - UIButton 将点击和滚动手势传递给 UIScrollView

    ios - cellForRowAtIndexPath 中对象的潜在泄漏

    objective-c - Objective C 垂直遍历图像中的像素