ios - 在 hitTest :withEvent: 拦截 UIControlEventTouchUpInside

标签 ios uiscrollview uievent

我关注了this great tutorial我终于设法实现了一个 3 个独立行的可滚动界面。

不过我还有一个问题,因为该教程的关键是方法的使用:

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event 
{
    NSLog(@"in hitTest");
    if ([self pointInside:point withEvent:event]) {
        return _scrollView;
    }
    return nil;
}

即使在 ScrollView 区域之外也能处理滚动。 事实上,我的行中充满了 UIButtons,它们的 TouchUpInside 事件与点击事件混在一起了。有没有办法让这个方法识别这些事件并拒绝它们,让它们传播给合法的委托(delegate)?

最佳答案

您可能应该按如下方式实现 -hitTest:withEvent: 方法:

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
  UIView *superView = [super hitTest:point withEvent:event];

  if (superView == self)
    return _scrollView;

  return superView; 
}

这将允许在 UIScrollView 的 subview 内进行交互。

关于ios - 在 hitTest :withEvent: 拦截 UIControlEventTouchUpInside,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7381717/

相关文章:

iOS Facebook App 浏览器 - 强制链接在 Safari 中打开

ios - 更新到 Xcode 10.2 后出现 PDFKit 问题。有什么办法解决吗?

ios - 捕获并记录 UIView 上的触摸事件

ios - 在 iOS 应用程序中处理互联网身份验证页面的最佳方式?

ios - 防止 SwiftUI 重置 @State

ios - 使用搜索栏时 UIScrollview 卡住

ios - 将自定义 UIView 更改为 UIScrollView

objective-c - UIWebview 旋转+转换问题

ios - 使兄弟 View 忽略任何触摸输入,另一个兄弟 View 应该接收它

ios - 为什么只为许多单独的触摸创建一个 UIEvent?