我有一个NSSegmentedControl
,在用户点击之后,应该在将操作发送到目标之前满足一些条件。
直到现在我设法通过覆盖-mouseDown
事件处理程序并仅在成功检查我的条件后调用segmentedControl的[super mouseDown]
处理程序才能做到这一点。
只有一个问题。在调用[super mouseDown]
之前,用户没有任何视觉线索表明已单击某个段。
所以问题是:有没有办法以编程方式设置“突出显示”状态(或多或少类似于setHighlighted
的“NSButtons
”?
答案 0 :(得分:1)
您可以取消选择操作方法中单击的细分。 你可以绕过一个额外的行动方法
- (IBAction)toggleSegments:(id)sender
{
NSSegmentedControl *segmentedControl = sender;
NSInteger selectedSegment = segmentedControl.selectedSegment;
if (! conditionsAreMet) {
[segmentedControl setSelected:NO forSegment:selectedSegment];
return;
}
[NSApp sendAction:@selector(reallyToggleSegments:) to:nil from:sender];
}
答案 1 :(得分:1)
在不满足条件时,您不需要调用-[NSSegmentedControl mouseDown]
,也不需要调用-[NSSegmentedCell stopTracking:at:inView:mouseIsUp:]
。
这是我编写的NSSegmentedControl子类,它使用委托来有条件地启用段选择:https://gist.github.com/michal-tomlein/39171668c580ac0d497d
当您按住鼠标按钮时,您会看到该段突出显示,但是如果从委托方法返回NO
,则会突出显示并且选择保持不变。
如果您在Interface Builder中使用它,请不要忘记同时设置视图类(MTSegmentedControl
)和单元类(MTSegmentedCell
)。