【发布时间】:2012-11-12 13:23:54
【问题描述】:
我有一个绑定到NSArrayController 的NSTableView。 NSArrayController 的 contentSet 属性绑定到 NSMutableSet。一切都很好。
现在我想使用NSTableView 内置的动画来删除行。我可以用- [NSTableView removeRowsAtIndexes:withAnimation:] 做到这一点,并且该行很快就会动画化,但是我从tableview 中删除的对象仍然挂在支持tableview 的NSMutableSet 中。显然我需要删除它。如果我尝试通过NSArrayController 的removeObject: 方法将其删除,那么该对象会立即从tableview 中消失,这意味着动画不会发生或在中途被切断。
绑定可以创造奇迹并使事情变得如此简单,但是当同时使用绑定和NSTableView 动画时,保持数据源和 tableview 同步的正确方法到底是什么?答案还应该解决如何使用动画向绑定的NSTableView 添加行。
【问题讨论】:
-
一种可能的方法是继承
NSArrayController并覆盖添加和删除方法以通知您的表格视图将删除/添加/移动哪个对象/索引。不完全确定这是否可行。 -
我不这么认为,因为在 NSArrayController 子类中仍然需要调用 [super removeObject:] 这将立即从 NSTableView 中删除相应的行并导致任何动画被抑制.
-
Carter:好吧,您必须保留一个单独的包含内容的数组,只需使用
NSArrayController作为信号来根据需要更新您自己的内容。我实在想不出办法。 -
@Carter 我在四处寻找时看到的证据是,目前还不可能,尽管它可能会在操作系统的未来迭代中可用。同时,您可以使用的替代方法可能是
NSCollectionView,它确实在使用绑定时支持动画。但是,我认为,如果说使用NSCollectionView会引入你必须解决的一系列问题,那就太轻描淡写了。 -
能不能用nsarray代替nsmutableset,然后先调用
[tableview removeRow...],然后从数组中同索引删除对象?
标签: objective-c cocoa nstableview