【问题标题】:Row animations for NSTableView with Bindings带有绑定的 NSTableView 的行动画
【发布时间】:2016-06-30 18:48:26
【问题描述】:

我有一个 NSTableView,它使用数组控制器绑定到动态数组,效果很好。

现在我意识到,当我向数组添加/插入元素时,行会直接添加到表视图中没有行插入动画。当我经常向数组添加元素时,由于缺少动画,表格视图看起来很奇怪。

当我插入或删除动态数组的元素时,是否有任何“官方”方式或解决方法来获取行动画?

【问题讨论】:

  • 该链接只提到了如何删除一个项目,但没有提到如何插入一个项目。
  • 同样的伎俩。而不是“从表视图中删除,从数组中删除”做“插入数组,插入表视图”。
  • 如果你使用 nsarraycontroller 作为后备存储,那就不一样了。原因是您的模型必须先更新,然后才能在 tableview 上调用 insert。我有问题如何停止 arraycontroller 重绘 tableview 以便我可以做动画
  • 尝试相同的技巧时,我得到一个索引超出范围或整个表重绘和移动。我认为这是因为我在表中插入了一行,在模型更新之前没有支持。删除工作正常,但添加不行。

标签: cocoa binding nstableview nsarraycontroller


【解决方案1】:

我知道这个问题已经很老了,但是当我尝试在使用绑定的 NSTableView 中为插入设置动画时遇到了类似的问题。这就是我最终要做的:

  1. 将数组控制器与 tableview 内容解除绑定。
  2. 将新对象插入到数组控制器中(不先解除绑定,这会自动将其插入到 tableview 中,而没有动画)。
  3. 为 tableview 插入动画。
  4. 将数组控制器重新绑定到 tableview 内容。
    // insertIndex and objectToInsert established earlier
    [self.myTableView unbind:NSContentBinding];
    [self.myArrayController insertObject:objectToInsert atArrangedObjectIndex:insertIndex];
    [NSAnimationContext runAnimationGroup:^(NSAnimationContext * _Nonnull context) {
        [self.myTableView insertRowsAtIndexes:[NSIndexSet indexSetWithIndex:insertIndex] withAnimation:NSTableViewAnimationSlideDown];
    } completionHandler:^{
        [self.myTableView bind:NSContentBinding toObject:self.myArrayController withKeyPath:@"arrangedObjects" options:@{NSRaisesForNotApplicableKeysBindingOption : @(YES)}];
    }];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-12
    • 1970-01-01
    • 1970-01-01
    • 2017-01-28
    • 2014-06-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多