我的NSOutlineView中有两列。一个是文本和图像单元格(类似于DragNDropOutlineView苹果示例代码中的类)。旁边是一个名为“NSCell”的定制XFToggleCell子类,用于显示可见性图标(眼球),您可以打开或关闭该图标(就像Photoshop一样)。
XFToggleCell支持鼠标跟踪/拖动(同样,就像Photoshop一样),因此您可以单击一个眼球,然后向下拖动以同时显示/隐藏多个项目。在文本和图像单元格中,当项目被隐藏时,我以灰色显示文本,而在不隐藏时,显示为黑色。
几乎一切都很好。当我点击一个眼球(XFToggleCell),它的图像清除,我的模型对象变得隐藏。但是,直到我单击切换单元格again...and时,相邻文本和图像单元格的字体才会变为灰色(它不会更新),图像和文本单元格的文本的颜色总是与其应该的颜色相反(当可见性被单击时,文本变为灰色,反之亦然)。
我确定发生这种情况的原因是,在更改切换单元格的值之前,正在重新绘制文本和图像单元格。因此,它的显示总是“一次点击后面”。顺序是这样的:
如果我可以像上面的步骤5那样强制对0列中的文本和图像单元格进行重绘,那么我应该可以继续。
由于单击列1的单元格,如何强制对0列的文本和图像单元格的绘图进行更新?
下面是我认为是关键的XFToggleCell.m (列1中的method...In )的实现:
- (BOOL)startTrackingAt:(NSPoint)startPoint inView:(NSView *)controlView
{
.
.
.
...do some stuff...
.
.
.
//Here's where I change the cell's object value, causing the cell to be redrawn.
//This part works fine.
[self setObjectValue:([self.representedObject newState]) ? self.image : nil];
.
.
.
//Why doesn't this next line update the adjacent cell?!?!?!?!?
//Column 0 contains the text and image cell I'm trying to update
[controlView setNeedsDisplayInRect:[(NSOutlineView *)controlView frameOfCellAtColumn:0 row:thisRow]];
}
return YES;
}发布于 2012-06-15 01:48:44
嗯,我不太清楚为什么,但是打电话
[(NSOutlineView *)controlView setNeedsDisplayInRect:[(NSOutlineView *)controlView frameOfCellAtColumn:col row:row]];当我把它放在最后的时候
-(BOOL)startTrackingAt:(NSPoint)startPoint inView:(NSView *)controlView在我的XFToggleCell课上。
所以我试着加入
[outlineView setNeedsDisplayInRect:[outlineView frameOfCellAtColumn:col row:row]];在我的最后
-(void) outlineView:(NSOutlineView *)outlineView setObjectValue:(id)object forTableColumn:(NSTableColumn *)tableColumn byItem:(id)item方法出现在我的NSOutlineView数据源中,并且工作正常。不知道为什么,但这就是怎么做的。如果有人能弄清楚为什么它不工作,打电话的本质上是相同的事情在牢房,我会很感激的信息。
https://stackoverflow.com/questions/11025586
复制相似问题