1

iOS 中的AUITableViewController包含一个用于行选择的微妙动画,在返回视图时(通过后退按钮),先前选择的行会短暂突出显示。这为用户提供了应用程序中的位置感。

对于UIViewControllers,这种行为不是免费的。包含的简单方法是手动取消选择viewWillAppear.

然而,iOS 7 允许用户通过导航堆栈向后“拖动”。部分拖动但未完成拖动操作将触发viewWillAppear并取消选择该行。当用户真实返回时,该行未被选中。

使用viewDidAppear肯定会解决这个问题,但动画是稍后触发的(显然)并且使应用程序感觉迟缓。

有没有人想出解决这个问题的方法?

4

1 回答 1

1

我一直在考虑自己的解决方案。例如,当您查看本机邮件应用程序实现的行为时,如果您单击后退按钮,则取消选择动画在 之前开始viewDidAppear,但两者都没有viewWillAppear,因为当不以交互方式关闭时,动画非常快速且突然。但是,当您在 上进行交互式关闭和取消选择时viewWillAppear,单元格会随着手指手势逐渐取消选择,就像本机邮件应用程序一样。它似乎viewWillAppear在动画块内部被调用。根据实验,performSelector:@selector(deselect) afterDelay:0viewWillAppear单击返回动画时会产生所需的动画。

总而言之,当用户点击返回按钮时:performSelector:@selector(deselect) afterDelay:0in viewWillAppear; 当用户以交互方式滑动以关闭时,deselectviewWillAppear.

那么如何区分这两种情况呢?中当然没有足够的信息viewWillAppear。现在,可以实现导航控制器委托方法,向表格视图控制器发出一个交互式弹出即将开始(之前viewWillAppear)的信号,然后将其交给 Apple 的常规交互式弹出交互控制器。捕获?_interactionController是私有 API。傻傻的苹果。

然后我发现你可以把它喂给UINavigationControllerinteractivePopGestureRecognizer。所以你可以坐在中间,听委托方法,给你的表格视图控制器发信号,并调用苹果的手势识别器的委托实现。

这应该足以让你继续前进。可能是上面的可选协议和类别UITableViewController,然后测试弹出到表视图控制器实例是否响应信号方法。当然,或者是一个子类。

于 2013-10-21T19:54:51.327 回答