我想知道如何在NSTableView / NSOutlineView中右键单击它们时,我可以摆脱Cocoa在行中绘制的蓝色轮廓。
NSTableView Outline http://tobidobi.com/nstableview_outline.png
如果我没有弄错的话,它似乎不是一个经典的“亮点”,也不是一个“焦点圈” - 所以,实际上它是什么?
我目前正在完全自己绘制自定义NSCells - 但我无法弄清楚如何使用 *也可以自己绘制这个大纲,或者 *摆脱它,或者 *至少改变颜色
非常欢迎任何提示!谢谢!
答案 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);