在 Objective-C 中实现这种滚动 UI 的最佳方式是啥?

Posted

技术标签:

【中文标题】在 Objective-C 中实现这种滚动 UI 的最佳方式是啥?【英文标题】:What is the best way to implement this scrolling UI in Objective-C?在 Objective-C 中实现这种滚动 UI 的最佳方式是什么? 【发布时间】:2015-08-11 18:37:53 【问题描述】:

我正在尝试实现如下图所示的界面视图。

UI Image

这个 UI 由三个部分组成,蓝色标签、箭头标签和灰色标签。

在此 UI 中,需要满足以下要求。

标签视图(蓝色)和箭头标签依次显示 蓝色标签可以互相改变位置(如 UITableView) 列表项可以删除 点击灰色标签,会出现一个新的蓝色标签,并附加在已显示的最后一个蓝色标签之后。

目前我觉得通过UITableView和自定义表格单元来实现这个UI还是不错的。但我不确定如何实现它,尤其是在蓝色标签之间显示箭头标签,在灰色标签之前附加新的蓝色标签。

有没有什么好方法可以在 UITableView 中轻松实现这些功能?或者,有没有其他方法可以做到这一点,比如使用 UIScrollView?

您的想法和帮助将不胜感激。

【问题讨论】:

就像你说的,自定义 UITableViewCell 类。如果你研究这个,你所有的答案都在那里。您可以根据需要格式化单元格。太大了,这里就不回答了。这是一个教程:Customize Table View Cells for UITableView 感谢您将教程链接放在这里。是的,我决定使用 UITableViewCell 类! 【参考方案1】:

不要使用 UIScrollView。随着蓝色单元格的数量越来越多,您将使用越来越多的内存。正确使用 UITableView 可确保随着单元格数组长度的增长,您的内存使用量保持不变(来自 UI 的内存)。

你有两个基本的选择:

多个部分,或单个部分。

有多个部分,每个 UITableViewCell 是一个蓝色单元格。使用 UITableViewSectionFooter 作为箭头单元格。这保证了每个蓝色单元格始终有一个箭头单元格。

对于单个部分,单元格数 = #ofbluecells * 2。然后,使用 indexPath.row % 2 来决定是否将蓝色单元格或箭头单元格出列。

无论您采用哪种方法,您都应该使用 UITableViewFooterView 来实现“添加新单元格”行为。

在任何一种方法中,您都可以通过更新数据模型(很可能是数组)然后调用 [tableView beginUpdates] 来删除单元格; [tableViewDeleteRowsAtIndexPaths:]; [tableView endUpdates];

插入一个新的蓝色单元格,与删除相同,只是添加到数组中。

在任何一种方法中,您都不必管理单独的箭头单元阵列。如果点击箭头单元格不起作用,我个人会选择每个蓝色单元格 1 个部分的路线。

【讨论】:

将 UITableViewSectionFooter 用作箭头单元格以及 UITableViewFooterView 用作新单元格的绝佳解决方案。有你的建议,事情会很顺利。谢谢!【参考方案2】:

如果您正在为 ios9 构建,您可以使用 UIStackView,它使用起来非常简单并且符合您的要求。您必须使用带有滚动视图的 UIStackview。 对于示例,您可以使用以下链接中的代码。

https://gist.github.com/twostraws/a02d4cc09fc7bc16859c

【讨论】:

不幸的是,我无法使用此解决方案,因为我正在为 iOS8 应用程序构建:( 但我很高兴学习这些不错的课程信息!感谢您的建议。

以上是关于在 Objective-C 中实现这种滚动 UI 的最佳方式是啥?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Flutter 中实现类似视频流和视频滚动的 Tiktok

如何在qt中实现字符滚动显示

如何在 Qt 中实现类似 Google 地图的磁贴滚动?

在 UITableView Objective-C 中实现 UISearchController

在 Objective-C 中实现 singleTap 和 doubleTap

如何在 Objective-C 和 Swift 中实现“didSelectButtonInCellAtIndexPath:”?