1

我有一个NSSegmentedControl,在用户点击后,在将操作发送到其目标之前应该满足一些条件。

到目前为止,我设法做到了这一点,方法是覆盖事件处理程序并仅在成功检查我的条件后才-mouseDown调用分段控制的处理程序。[super mouseDown]只有一个问题。[super mouseDown]在调用之前,用户没有任何视觉线索表明已单击了段。

所以问题是:有没有办法以编程方式设置“突出显示”状态(或多或少像 " setHighlighted" for NSButtons)?

4

2 回答 2

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];
}
于 2014-11-05T14:25:47.907 回答
1

-[NSSegmentedControl mouseDown]当条件不满足时,您不需要调用,而不是不调用-[NSSegmentedCell stopTracking:at:inView:mouseIsUp:]

这是我编写的 NSSegmentedControl 子类,它使用委托有条件地启用段选择:https ://gist.github.com/michal-tomlein/39171668c580ac0d497d

当您按住鼠标按钮时,您会看到该段被突出显示,但随后未突出显示,并且如果您NO从委托方法返回,则选择保持不变。

如果您在 Interface Builder 中使用它,请不要忘记同时设置视图类 ( MTSegmentedControl) 和单元类 ( MTSegmentedCell)。

于 2015-08-14T09:56:46.493 回答