【问题标题】:Trying to Create a mostly custom TableView尝试创建一个主要是自定义的 TableView
【发布时间】:2013-08-18 18:50:19
【问题描述】:

我正在尝试制作自定义表格视图。我有一个加载了 UIViews 的 UIScrollView。我想重新创建 tableview 具有的可重用单元格功能。我想知道有什么好的方法可以做到这一点。

我在想,当 UIViews 滚出屏幕时,我会将它们从 Subview 中删除,当我需要另一个时,我会添加它。但是我不确定哪种方法可能是最好的方法。

我可以查看scrollViewDidScroll: 中的视图位置,但我不确定这是否是一遍又一遍检查的最佳选择。如果有人有任何建议或有用的提示,那将是非常棒的。

谢谢!

【问题讨论】:

    标签: iphone ios objective-c xcode


    【解决方案1】:

    scrollViewDidScroll 不是理想选择的一个原因是您的滚动视图子类需要成为它自己的委托。这将剥夺该类的用户成为代表的机会(至少很容易)。

    检查这一点的更好地方是覆盖layoutSubviews。是的,就像 scrollViewDidScroll 一样,它经常被调用!但是,如果您考虑一下,确定是否有任何子视图已被滚动关闭的唯一方法是检查何时发生任何滚动。

    所以关键是尽可能高效地检查。我要尝试的第一件事是快速枚举子视图,询问由 contentOffset 转换的每个帧是否在父视图的范围内(使用CGRectIntersectsRect)。如果没有,请将其添加到您的重用池中并将其从 superview 中删除。

    【讨论】:

    • 好东西。我喜欢这听起来。快速提问。当我滚动说屏幕顶部的第一行时,我计划通过将其粘贴到底部来重复使用它。但是允许用户向下滚动到新添加的行,我需要增加 ScrollView 的 contentSize 。这个可以吗?还是我应该尝试其他方式?
    • 我想 tableview 的工作方式是要求它委托 numberOfRows 并将内容大小设置为 rowHeight 的倍数。
    【解决方案2】:

    子类UIScrollView 并覆盖setContentOffset。这就是原始UITableViewscrollViewDidScroll 消息的来源,您可以在那里实现自己的逻辑。

    编辑:您可能想研究PSTCollectionView 的源代码,它不是自定义的UITableView,而是自定义的UICollectionView

    【讨论】:

      猜你喜欢
      • 2013-03-08
      • 1970-01-01
      • 1970-01-01
      • 2022-01-16
      • 2021-11-26
      • 2018-04-11
      • 1970-01-01
      • 2014-11-02
      • 1970-01-01
      相关资源
      最近更新 更多