我一直在考虑自己的解决方案。例如,当您查看本机邮件应用程序实现的行为时,如果您单击后退按钮,则取消选择动画在 之前开始viewDidAppear
,但两者都没有viewWillAppear
,因为当不以交互方式关闭时,动画非常快速且突然。但是,当您在 上进行交互式关闭和取消选择时viewWillAppear
,单元格会随着手指手势逐渐取消选择,就像本机邮件应用程序一样。它似乎viewWillAppear
在动画块内部被调用。根据实验,performSelector:@selector(deselect) afterDelay:0
在viewWillAppear
单击返回动画时会产生所需的动画。
总而言之,当用户点击返回按钮时:performSelector:@selector(deselect) afterDelay:0
in viewWillAppear
; 当用户以交互方式滑动以关闭时,deselect
在viewWillAppear
.
那么如何区分这两种情况呢?中当然没有足够的信息viewWillAppear
。现在,可以实现导航控制器委托方法,向表格视图控制器发出一个交互式弹出即将开始(之前viewWillAppear
)的信号,然后将其交给 Apple 的常规交互式弹出交互控制器。捕获?_interactionController
是私有 API。傻傻的苹果。
然后我发现你可以把它喂给UINavigationController
它interactivePopGestureRecognizer
。所以你可以坐在中间,听委托方法,给你的表格视图控制器发信号,并调用苹果的手势识别器的委托实现。
这应该足以让你继续前进。可能是上面的可选协议和类别UITableViewController
,然后测试弹出到表视图控制器实例是否响应信号方法。当然,或者是一个子类。