如何禁用nsview的用户交互

时间:2017-06-08 20:46:55

标签: c# macos xamarin

我正在尝试在iOS中执行与UserInteractionEnabled = false类似的操作,但似乎NSView中没有此属性。我还看到一种方法是实现hittest方法返回null,但是这个lass的hittest已经有一个非平凡的实现,我不认为我可以设置它返回null。我发现了一个名为acceptsTouchEnabled的(已弃用)属性,我想知道它是否可以实现与UserInteractionEnabled相同的功能。 该项目在Xamarin,btw。

完成
FreeHandView = new PaintBoardControl
        {
            BackgroundColor = UIColor.Clear,
            TranslatesAutoresizingMaskIntoConstraints = false,
            UserInteractionEnabled = false
        };

这是变量的原始声明,其中UserInteractionEnabled设置为false。

这是我的Mac应用中的hittest方法的实现:

public override NSView HitTest(CGPoint aPoint)
    {

        aPoint = ContentContainer.ConvertPointFromView(aPoint, this);
        aPoint = new CGPoint(aPoint.X + _freehandViewLeftConstraint.Constant,
            aPoint.Y + _freehandViewTopConstraint.Constant);
        if (_hitTestBitArray != null && aPoint.X >= 0 && aPoint.Y >= 0 &&
            _hitTestBitArrayWidth > aPoint.X && _hitTestBitArrayHeight > aPoint.Y)
        {
            var index = aPoint.Y * _hitTestBitArrayWidth + aPoint.X;
            return _hitTestBitArray.Get((int)index) ? this : null;
        }

        return null;
    }

1 个答案:

答案 0 :(得分:0)

有时hitTest根本不工作尝试使用这样的东西也许mousedown可以帮助你

 public class ExtendedNSView : NSView
    {
        public bool IsEnabled { get; set; }

        public override void MouseDown(NSEvent theEvent)
        {
            if (IsEnabled)
            {
                base.MouseDown(theEvent);
            }
        }
    }