1

我现在知道,如果您将视图控制器推送到带有动画的导航控制器上,则必须等到该动画完成后再推送另一个视图控制器,否则您会收到警告并可能出现意外结果。

您如何检查导航控制器动画是否已完成以避免此问题?

谢谢

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:    (NSIndexPath *)indexPath
{ 
    // ...


    //Make sure animation has completed before sending message below


[[self navigationController] pushViewController:detailsViewController animated:NO];

//...

}
4

2 回答 2

3

如果您想一次推动一个 VC(在许多 VC 上向右移动很好),您可以UINavigationControllerDelegate在控制器类self.navigationController.delegate中实现 UINavigationController 将navigationController:didShowViewController:animated:在每次推送后调用。

于 2012-03-14T18:08:43.810 回答
-1

我使用了一种对我来说效果很好的替代方法。只需将pushViewController:animated:调用包装animations:[UIView animateWithDuration:animation:completion. 将您需要在完成时运行的任何内容,例如推动我正在做的后续控制器,在completion:.

就我而言,我在一个方法中运行整个过程,该方法采用一个数组 (NSMutableArray),其中包含要推送的控制器列表作为参数。在块中,该方法从数组 ( and )completion:中弹出第一个元素,并使用数组的其余部分调用自身。objectAtIndex:0removeObjectAtIndex:0

这是一个有趣的延续传递风格的实现 :) 不过要注意的是,在动画结束时,新导航控制器的内容可能没有完全加载,所以这种方法只有在你的推送独立于那个时才是可靠的内容。

于 2013-01-31T17:08:56.680 回答