NSSegmentedControl 以编程方式突出显示段



我有一个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 (。

相关内容

  • 没有找到相关文章

最新更新