我有一个NSSegmentedControl
,在用户单击时,在将操作发送到其目标之前应满足一些条件。
到目前为止,我设法通过重写 -mouseDown
事件处理程序并在成功检查我的条件后调用 segmentedControl 的[super mouseDown]
处理程序来做到这一点。只有一个问题。在调用区段之前,用户没有任何视觉线索表明已单击[super mouseDown]
段。
所以问题是:有没有办法以编程方式设置"突出显示"状态(或多或少像NSButtons
的"setHighlighted
"(?
操作方法中取消选择单击的细分。您可以通过其他操作方法绕道而行
- (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];
}
条件不满足时,您不需要调用-[NSSegmentedControl mouseDown]
,而不需要调用-[NSSegmentedCell stopTracking:at:inView:mouseIsUp:]
。
这是我编写的一个 NSSegmentedControl 子类,它使用委托有条件地启用段选择:https://gist.github.com/michal-tomlein/39171668c580ac0d497d
你将看到,按住鼠标按钮时,该段已突出显示,但随后未突出显示,并且如果从委托方法返回NO
,则选择保持不变。
如果您从界面生成器中使用它,请不要忘记同时设置视图类 ( MTSegmentedControl
( 和单元格类 ( MTSegmentedCell
(。