我有一个项目,我需要在iPad上的相同视图内显示多个UITableView
实例。他们也恰好轮流,但我相当肯定这是无关紧要的。用户应该不知道该视图是由多个表视图组成的。因此,我想这样做是为了当我滚动一个tableview时,其他人同时滚动它。同步多个UITableView实例的滚动位置
由于UITableView
是UIScrollView
的子类,我想我可以处理UIScrollViewDelegate
方法并将它们传递给所有的tableviews。不幸的是,虽然我可以捕获一些事件,但方法调用粒度不够好,我无法将这些消息传递给其他的tableviews。我能得到的最接近的是执行-scrollViewDidScroll:
,然后在每个tableview上调用-setContentOffset:animated
。如果我试图发送这个消息来处理所有潜在的情况,我最终会锁定,因为-scrollViewDidScroll
正在为我的-setContentOffset:animated
调用呼叫,所以我最终冻结了。无论如何,如果我通过仅使用此方法来检测一个tableview上的滚动并将其传递给其他tableview,我发现尽管其他tableviews最终会滚动到同一位置,但它们落后于第二个或二。
Here's a sample project I created.
我如何能实现没有子UITableView
这种行为?
呜呼!它完美的作品。我完全忘记了关键值观察。谢谢。 – 2012-03-26 20:51:07
难道你不能用一个单独的“ScrollMultiplexer”对象来做到这一点,所以你没有讨厌的n^2观察?一个对象可以观察到所有的UITableView,并且该对象可以将更新发送给所有其他UITableView。这样,就没有循环,也不需要不断地解开。 – StCredZero 2012-10-09 19:06:19
好吧,这已经发生在一个“单独的”对象(视图控制器)上,所以对于我来说这并不明显,但我可以承认这种可能性。 – warrenm 2012-10-09 22:35:48