0

我的NSBrowser一个窗户里有一个。如屏幕截图所示,它有一个复选框、图像和文本框。

我正在努力做两件事:

  1. 更改行选择颜色。默认情况下它是蓝色的。
  2. 对复选框的操作

复选框+图像+文本框被添加到这样的子类中NSBrowserCell

- (instancetype)init
{
    self = [super init];
    if (self) {
        _buttonCell = [[NSButtonCell alloc] init];
        [_buttonCell setButtonType:NSButtonTypeSwitch];
        [_buttonCell setTarget:self];
        [_buttonCell setAction:@selector(cellButtonClick:)];
        [_buttonCell setTitle:@""];

        _imageCell = [[NSImageCell alloc] init];

        _textCell = [[NSTextFieldCell alloc] init];

    }
    return self;
}

我也添加了目标和动作,但它没有被调用。

我如何实现这两件事?

任何指导将不胜感激。

在此处输入图像描述

4

1 回答 1

1

警告:自定义NSBrowser/NSBrowserCell通常很难。这是一个已被废弃多年的遗留视图类,它有很多未记录的怪癖。

话虽如此,尝试覆盖-highlightColorWithFrame:inView:以使用不同的颜色突出显示该行。这就是你所需要的,那么我认为应该这样做。

至于动作,NSCell(与视图和控件不同)不是子类,NSResponder也不执行任何自动鼠标事件处理。(单元格只是绘制控件/元素视图的辅助对象。)

您可能必须在浏览器视图级别捕获事件,然后执行命中测试以找到包含您的复选框单元格的列/行。如果你找到了命中,然后自己发布操作信息(-sendAction:to:from:)——这实际上就是NSControl视图的作用。

于 2020-06-07T20:02:58.973 回答