NSTableView:右键单击行上的蓝色轮廓

时间:2010-11-18 21:28:04

标签: cocoa nstableview

我想知道如何在NSTableView / NSOutlineView中右键单击它们时,我可以摆脱Cocoa在行中绘制的蓝色轮廓。

NSTableView Outline http://tobidobi.com/nstableview_outline.png

如果我没有弄错的话,它似乎不是一个经典的“亮点”,也不是一个“焦点圈” - 所以,实际上它是什么?

我目前正在完全自己绘制自定义NSCells - 但我无法弄清楚如何使用  *也可以自己绘制这个大纲,或者  *摆脱它,或者  *至少改变颜色

非常欢迎任何提示!谢谢!

3 个答案:

答案 0 :(得分:13)

不幸的是,我不知道有任何记录的方法可以做到这一点,除了编写自己的表视图替换。

要覆盖的方法是:

- (void)drawContextMenuHighlightForRow:(NSInteger)row;

请向Apple提交增强请求,以便您将来不必依赖未记录的方法来执行您想要的操作。看起来其他两个表视图突出显示的方法在10.6中可以自定义,但这个方法不是。我一直以为它看起来有点笨重,但有必要指出菜单引用的行(不一定与突出显示的行相同)。

答案 1 :(得分:2)

我的NSTableView * mainTableView不是子类,所以我在上下文菜单打开之前就摆脱了它:

- (void)menuWillOpen:(NSMenu *)menu{
     NSInteger rightClicked = [mainTableView clickedRow];
     [mainTableView selectRowIndexes:[NSIndexSet indexSetWithIndex:rightClicked] byExtendingSelection:NO];
     [mainTableView deselectRow: rightClicked];
     [mainTableView reloadData];
    {

答案 2 :(得分:0)

这是我重新绘制这些轮廓的尝试:

// From https://www.w3docs.com/snippets/javascript/how-to-randomize-shuffle-a-javascript-array.html
function shuffleArray(array) {
  let curId = array.length;
  // There remain elements to shuffle
  while (0 !== curId) {
    // Pick a remaining element
    let randId = Math.floor(Math.random() * curId);
    curId -= 1;
    // Swap it with the current element.
    let tmp = array[curId];
    array[curId] = array[randId];
    array[randId] = tmp;
  }
  return array;
}

numbers = [23, 12, 71, 10]
operators = [
  (a, b) => a + b,
  (a, b) => a - b,
  (a, b) => a / b,
  (a, b) => a * b
];

let result = 1;

while (result != 0) {
  result = 1;
  operators = shuffleArray(operators);
  operators.forEach(function(op) {
    result = Math.floor(op(result, numbers[operators.indexOf(op)]))
  });
  console.log(result);
}

console.log(operators);