我放了几个控件(按钮,文本字段,...)在NSBox中。是否可以禁用用户无法访问控件的NSBox (即不能单击按钮或在文本字段中写入)?
nsview怎么样?
发布于 2012-05-06 00:34:34
或者,如果你有一个自定义的NSBox,你可以覆盖NSView的-hitTest:(有条件的)
- (NSView *)hitTest:(NSPoint)aPoint {
if (!enabled) return nil;
else return [super hitTest:aPoint];
}若要停止窗口向所有子视图发送事件,请执行以下操作。
为了提供视觉反馈,有条件地在自定义NSBox的-drawRect方法中绘制某种覆盖图是可行的。
发布于 2012-05-05 23:22:26
NSBox基本上只是一个带有边框的视图,没有办法“禁用”它。如果你想禁用一个框中的所有控件,你可以遍历它的所有子视图并禁用它们,或者我的另一种方法是在整个框上放置一个覆盖视图并覆盖该覆盖中的mouseDown (以捕获任何mouseDown事件,这样它们就不会在事件循环中排队)。也可以为覆盖提供半透明的白色,使长方体具有禁用的外观。
发布于 2013-01-09 04:52:52
是的,您只需要查看NSBox的子视图,它通常只是一个NSView,然后您的实际控件将位于该视图的子视图下。
下面是我编写的一个快速的C风格的函数,用于启用/禁用大多数常见的UI控件,包括NSBox...
void SetObjEnabled(NSObject * Obj, bool Enabled)
{
//Universal way to enable/disable a UI object, including NSBox contents
NSControl * C = (NSControl *)Obj;
if([C respondsToSelector:@selector(setEnabled:)])
[C setEnabled:Enabled];
if([C.className compare:@"NSTextField"] == NSOrderedSame)
{
NSTextField * Ct = (NSTextField*)C;
if(!Enabled)
[Ct setTextColor:[NSColor disabledControlTextColor]];
else //Enabled
[Ct setTextColor:[NSColor controlTextColor]];
}
else if([C.className compare:@"NSBox"] == NSOrderedSame)
{
NSBox * Cb = (NSBox*)C;
//There is typically just one subview at this level
for(NSView * Sub in Cb.subviews)
{
//Here is where we'll get the actual objects within the NSBox
for(NSView * SubSub in Sub.subviews)
SetObjEnabled(SubSub, Enabled);
}
}
}https://stackoverflow.com/questions/10462876
复制相似问题