2

我有一个UITableView基于NSFetchedResultsController. 为了在表格中插入新行,我打开了一个模态视图控制器,然后我点击了保存按钮,该按钮关闭了模态视图并导致我的NSFetchedResultsController委托方法(willChangeContent、didChangeObject`等)触发,从而动画插入一个新的细胞。一切都很好,但我希望用户见证这个动画,当模态视图消失时,动画已经完成。

如何延迟此动画直到模态视图完全消失,以便用户可以看到动画?

4

1 回答 1

1

无论有没有 NSFetchedResults 控制器,这是一个很好的问题——您有一个正在观察模型的表 vc,并且您希望用户在从另一个视图控制器弹出或关闭后看到动画变化。

可能有更好的方法,但我最近在类似情况下所做的事情是让表 vc 根据来自子公司(推送或模态呈现)vc 的委托消息自行更新模型。

因此,在表 vc 中:

AddingVC *addingVC = [[AddingVC alloc] initWithDelegate:self];
[self presentModalViewController:addingVC animated:YES];

// adding to the model will happen in this vc, based on a delegate message

- (void)addingVcDidCreateAnObjectToAdd:(id)objectToAdd {

    // add to your model here
}

添加 vc 可以做到这一点(我对此并不完全感到自豪,但它确实有效)......

- (void)thingIsReadyToAdd {

    SEL selector = @selector(addingVcDidCreateAnObjectToAdd:);
    [self.delegate performSelector:selector withObject:objectToAdd afterDelay:1.5];
    // 1.5 is on the long side, since the vc transition is about 0.5, so 1.0 is okay
}

在我的例子中,我使用了一个更传统的委托协议,将addingVC作为第一个参数传递,但是这样做有延迟需要一个冗长的NSInvocation,所以我在这里跳过它。+1 也解决了困扰我的问题。我很好奇其他人的解决方案。

于 2012-04-09T03:12:56.327 回答