Я создал пользовательский NSView
, который я хотел бы разместить поверх содержимого окна, чтобы заблокировать любое взаимодействие, пока загружается весь контент. Проблема, с которой я столкнулся, заключалась в том, что я мог щелкнуть NSView
к элементам управления ниже, хотя это было исправлено. Новая проблема заключается в том, что, хотя я не могу щелкнуть элементы управления, когда я перемещаю мышь по элементам управления текстом, мышь переключается на значок I Beam.
Как заставить NSView полностью блокировать все взаимодействия со всем, что находится под ним?
Созданный мной NSView приведен ниже:
[Register("StupidView")]
public class StupidView : NSView
{
public StupidView()
{
// Init
Initialize();
}
public StupidView(IntPtr handle) : base (handle)
{
// Init
Initialize();
}
[Export("initWithFrame:")]
public StupidView(CGRect frameRect) : base(frameRect) {
// Init
Initialize();
}
private void Initialize()
{
this.AcceptsTouchEvents = true;
this.WantsLayer = true;
this.LayerContentsRedrawPolicy = NSViewLayerContentsRedrawPolicy.OnSetNeedsDisplay;
}
public override void DrawRect(CGRect dirtyRect)
{
var ctx = NSGraphicsContext.CurrentContext.GraphicsPort;
ctx.SetFillColor(new CGColor(128, 128, 128, 0.7f));
ctx.FillRect(dirtyRect);
}
public override void MouseDown(NSEvent theEvent)
{
if (Hidden)
{
base.MouseDown(theEvent);
}
}
public override void MouseDragged(NSEvent theEvent)
{
if (Hidden)
{
base.MouseDragged(theEvent);
}
}
public override bool AcceptsFirstResponder()
{
return !this.Hidden;
}
public override bool AcceptsFirstMouse(NSEvent theEvent)
{
return !this.Hidden;
}
public override NSView HitTest(CGPoint aPoint)
{
return Hidden ? null : this;
}
}