Ber*_*ron 16 cocoa nsoutlineview nstableview
我试图在基于视图的基础上释放一些压力,NSOutlineView为此我更改了单项属性,并且我最初使用时重新加载[myOutlineView reloadData].
我尝试 [myOutlineView reloadItem: myOutlineViewItem]但它从不调用- (NSView *)outlineView:(NSOutlineView *)ov viewForTableColumn:(NSTableColumn *)tableColumn item:(id)item,因此数据不会更新.
-(void)reloadOutlineViewObject
{
//[myOutlineView reloadData]; //Reload data just fines but is ressource-hungry
NSLog(@"%d",[myOutlineView rowForItem:myOutlineViewItem]; //Making sure my object is an item of the outlineView, which it is !
[myOutlineView reloadItem:myOutlineViewItem];
}
Run Code Online (Sandbox Code Playgroud)
我在这里错过了什么吗?
正如评论中指出的那样,我的outlineView是基于视图的.
尝试一些东西让我意识到我正在重新加载的对象是一个二级对象(cf对象树)并且调用reloadItem:firstLevelObject reloadChildren:YES确实有效.
是否有可能我们只能在第一级对象上调用reloadItem:在我的情况下,这将是非常低效的(我只有一个两级项目和大量的第二级)!
nil ->firstLevelA ->secondLevel1
->secondLevel2
->firstLevelB ->secondLevel3
->secondLevel4
Run Code Online (Sandbox Code Playgroud)
要尝试子类化NSOutlineView并reloadItem:在同一时间重写.
我看了一下Cocotron中的NSOutlineView来开始,并觉得我需要写的代码来覆盖reloadItem会很安静.有人确认吗?
Bri*_*ter 15
我在基于视图的大纲视图中遇到了同样的问题,其中调用-reloadItem:似乎没有做任何事情.这绝对看起来像一个大错误,虽然文档没有明确说明reloadItem将重新获取该行的视图.
我的解决方法是调用NSTableView's -reloadDataForRowIndexes:columnIndexes:,它似乎按预期工作,触发对该项的-outlineView:viewForTableColumn:item:委托方法的调用.您可以通过调用-rowForItem:并传入要重新加载的项来获取需要重新加载的行.
这真的不是一个错误 - 这是我明确设计的.我的想法是reloadItem(etc)应该只重新加载大纲视图项属性,而不是那个项目的表格单元格,因为它没有提供关于重新加载什么的足够的特定信息(例如你可能想要重新加载的特定单元格).我原本打算让人们使用reloadDataForRowIndexes:columnIndexes:重新加载基于特定视图的tableview单元格; 当基类只用几行代码就可以很容易地做同样的事情时,我们通常不提供覆盖方法.
然而,话虽如此,我知道有很多人对此感到困惑,大多数人都希望它能够重新加载这个细胞.
请记录一个错误,要求Apple更改此信息.
谢谢,-corbin
| 归档时间: |
|
| 查看次数: |
2510 次 |
| 最近记录: |