ios - 我需要 ViewController 容器还是复合 View ?

标签 ios

我需要为 iOS 实现 Accordion 控件。通过 Accordion ,我的意思是像这样的 UI:

enter image description here

我看到有两种基本方法可以做到这一点,但我不确定该选择哪一种。

方法 #1:创建一个 ViewController 容器,类似于 UITabBarController,不同之处在于我没有在底部显示选项卡,而是绘制了一堆垂直按钮,当你点击一个按钮时,相应的面板打开并显示相应的 View Controller 的 View 。

方法#2:创建一个复合 View ,直接向其中添加一堆 View ,并根据需要显示/隐藏它们。

这里如何选择?是什么让我想要将子单元视为 View Controller 而不是 View ?

最佳答案

一般来说,如果我能避免它,我会尽量不子类化 UIView 而是在 UIViewController 子类中做所有事情。无论如何通常都需要一个 Controller (模型/ View 粘合代码、用户交互、委托(delegate)内容、通知处理等),因此如果不需要自定义绘图,通常可以不使用 UIView 子类.

在您的情况下,我可以设想一个可重用的 UIViewController 子类,它代表一个列表条目。它具有以下职责:

  • 创建两个备用 View 层次结构(折叠/按钮,展开/面板)
  • 根据用户交互(有/无动画)在 View 层次结构之间切换

还有另一个代表整个列表的 UIViewController 子类。它具有以下职责:

  • UIViewController 中覆盖适当的方法,使其成为容器 VC
  • 根据内部模型添加/删除子 VC
  • 可能调整容器 View 以响应其子 VC 中的折叠/展开事件

关于ios - 我需要 ViewController 容器还是复合 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17225213/

相关文章:

ios - 为 iOS 构建时,Flutter 卡在 "Running Xcode build... "

ios - 应用平移手势后如何在捏合手势上定位 View ?

ios - 在从 UIViewController 调用的非保留完成中引用 self 时,weakSelf/strongSelf 舞蹈真的有必要吗?

ios - 如何将图像作为 CKAsset 正确发送到 CloudKit?

ios - 如何正确地水平和垂直对齐两个按钮

ios - Swift/SpriteKit - 球节点向下释放角度

ios - 在 Swift 中将 AnyObject 添加到 NSMutableArray

ios - dequeueReusableSupplementaryViewOfKind 在 ios 7.1 上崩溃 - 索引 0 超出空数组的范围

ios - 在 Swift 中将 UInt32 (UTF-32) 转换为字符串

ios - 无法将类型 'UInt' 的值转换为预期的参数类型 'UnsafeMutablePointer<UInt>'