首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更改另一个NSCell时刷新NSCell

更改另一个NSCell时刷新NSCell
EN

Stack Overflow用户
提问于 2012-06-14 01:35:09
回答 1查看 1K关注 0票数 0

我的NSOutlineView中有两列。一个是文本和图像单元格(类似于DragNDropOutlineView苹果示例代码中的类)。旁边是一个名为“NSCell”的定制XFToggleCell子类,用于显示可见性图标(眼球),您可以打开或关闭该图标(就像Photoshop一样)。

XFToggleCell支持鼠标跟踪/拖动(同样,就像Photoshop一样),因此您可以单击一个眼球,然后向下拖动以同时显示/隐藏多个项目。在文本和图像单元格中,当项目被隐藏时,我以灰色显示文本,而在不隐藏时,显示为黑色。

几乎一切都很好。当我点击一个眼球(XFToggleCell),它的图像清除,我的模型对象变得隐藏。但是,直到我单击切换单元格again...and时,相邻文本和图像单元格的字体才会变为灰色(它不会更新),图像和文本单元格的文本的颜色总是与其应该的颜色相反(当可见性被单击时,文本变为灰色,反之亦然)。

我确定发生这种情况的原因是,在更改切换单元格的值之前,正在重新绘制文本和图像单元格。因此,它的显示总是“一次点击后面”。顺序是这样的:

  1. I鼠标按下第1列的切换单元格。
  2. 0列中的文本和图像单元格被重新绘制。
  3. 第1列中的切换单元格的对象值被更改。
  4. 第1列中的切换单元格被重新绘制。

如果我可以像上面的步骤5那样强制对0列中的文本和图像单元格进行重绘,那么我应该可以继续。

由于单击列1的单元格,如何强制对0列的文本和图像单元格的绘图进行更新?

下面是我认为是关键的XFToggleCell.m (列1中的method...In )的实现:

代码语言:javascript
复制
- (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;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-15 01:48:44

嗯,我不太清楚为什么,但是打电话

代码语言:javascript
复制
[(NSOutlineView *)controlView setNeedsDisplayInRect:[(NSOutlineView *)controlView frameOfCellAtColumn:col row:row]];

当我把它放在最后的时候

代码语言:javascript
复制
-(BOOL)startTrackingAt:(NSPoint)startPoint inView:(NSView *)controlView

在我的XFToggleCell课上。

所以我试着加入

代码语言:javascript
复制
[outlineView setNeedsDisplayInRect:[outlineView frameOfCellAtColumn:col row:row]];

在我的最后

代码语言:javascript
复制
-(void) outlineView:(NSOutlineView *)outlineView setObjectValue:(id)object forTableColumn:(NSTableColumn *)tableColumn byItem:(id)item

方法出现在我的NSOutlineView数据源中,并且工作正常。不知道为什么,但这就是怎么做的。如果有人能弄清楚为什么它不工作,打电话的本质上是相同的事情在牢房,我会很感激的信息。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11025586

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档