iOS:当 SignaturePadView 在 UIScrollView 中时,如何防止滚动?

标签 ios xamarin uiscrollview xamarin.ios

在我的移动程序 UI 中,我有一个位于 UIScrollView 中的 SignaturePadView(继承自 UIView 的第 3 方组件)。每当我尝试调试程序时,只要我将手指放在 SignaturePadView 中并开始签名,它所在的 ScrollView 就会捕获输入并滚动,不允许我创建签名。当用户在 SignaturePadView 内部触摸时,是否可以禁用 UIScrollView 的滚动功能。

我尝试过的两件事没有成功:

  1. SignaturePadView 上将 ExclusiveTouch 设置为 true。对于这个,ScrollView 似乎在检查 ExclusiveTouch 之前捕获输入。
  2. 子类化 UIScrollView 并覆盖 TouchesShouldBegin 以关闭滚动。这允许我检查 inContentView 参数以查看它是否属于 SignaturePadView 类型。这有两个问题:首先,SignaturePadView 中有 subview 返回到 inContentView 而不是 SignaturePadView。其次,TouchesEnd 并不总是触发,允许我在用户完成签名后重新打开滚动。

此时此刻,我正在寻求有关此问题的任何帮助。我是 Xamarin 和 iOS 开发的新手,最后一件事让我无法完成我的项目。

最佳答案

我在浏览了一些 Objective-C 代码后发现了它。我必须子类化 ScrollView 并覆盖 HitTest。对于将来遇到此问题的任何人,这是我使用的代码。

自定义 ScrollView :

public class CustomScrollView : UIScrollView
{
    public IList<CGRect> DeadAreas { get; } = new List<CGRect>();

    public override UIView HitTest(CGPoint point, UIEvent uievent)
    {
        ScrollEnabled = DeadAreas.Any(x => x.Contains(point)) ? false : true;

        return base.HitTest(point, uievent);
    }
}

在我的 ViewController 中:

_formView.DeadAreas.Add(signaturePadViewer.Frame);

像魅力一样工作。原来我原来的错误是重写了 Touch 方法而不是 HitTest 方法。

关于iOS:当 SignaturePadView 在 UIScrollView 中时,如何防止滚动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35066206/

相关文章:

ios - native 链接失败,重复符号 : '_main' while adding native Binding Dll and Xamarin. Firebase.iOS.Database

ios - 如何根据 Xamarin Forms 应用程序中的构建配置交换 iOS 启动页面图像

ios - 将 UIImagePickerController 与 UICollectionView 一起使用

ios - 如何将scrollView嵌入到UIViewController的 View 顶部并添加其中包含内容的自定义UIView?

android - Assets 复制未完成

ios - SpriteKit,Swift 2.0 - Scrollview 给我一个错误

ios - 完成后的 UIView 动画无法正常工作

iPhone iOS : SQLite3 Not able to get last ID value in Table

iOS 7 自定义字体对齐

android - Haste 模块映射中不存在模块 `@babel/runtime/helpers/interopRequireDefault`