【问题标题】:View Controllers and Multiple Views视图控制器和多个视图
【发布时间】:2016-02-08 22:05:14
【问题描述】:

我正在开发我的第一个 iOS 应用程序,并试图了解有关视图和视图控制器的一些信息。

我的问题是:在像 Instagram 这样的应用中,主 Tab Bar Controller 中有一个“活动”标签。活动选项卡有一个UISegmentedControl 表示“关注”和“您”,它们显示相似的数据,但查询不同的记录。每个UISegments 中的数据是否会由单独的控制器控制? (例如FollowingControllerYouController)。

对于在地图上查看位置等实例,并且您希望拥有地图视图和列表视图,该怎么办?会有MapViewControllerListViewController,还是一个视图控制器来管理所有这些,并且会根据用户的选择有条件地加载不同的视图?

【问题讨论】:

  • 您可以实现容器视图控制器,并在其中简单地加载视图控制器的视图。地图不需要另一个视图控制器,你可以把所有东西放在一个视图控制器中!如果您认为地图部分是从其他类调用的,那么您可能需要一个单独的地图控制器。

标签: ios uiviewcontroller


【解决方案1】:

不,您可以使用单个 UIViewController 和/或 UITableView(取决于您希望如何呈现数据)并根据分段控件的选项更改 dataSource

如需了解更多信息,请查看UITableViewDataSource。在 Table View 的情况下,dataSource 只不过是一些数据的数组。

除了表格视图/集合视图之外的另一种方法是将Container View 放在 UIViewController 中,这将只使用一个 UIViewController 实例。欲了解更多信息refer to the documentation。尤其是看图:

对于您的第二个问题 - 再次不。您可以拥有一个 UIViewController 并放置 MapKit 和/或列表(又名 UITableView)的实例。您可以在 Storyboard 中通过像这样拖动 MapKit 的实例来做到这一点:

您的单个 UIViewController 可能如下所示:

【讨论】:

  • 感谢您的回复。对于第一个示例,这对我来说很有意义,因为视图是相同的。然而在我的第二个例子中,一个是表格视图,另一个是谷歌地图。那会需要两个不同的视图控制器吗?
  • 谢谢。然后我会相应地隐藏/显示那些表格/地图视图?
  • 你可以做任何你想做的事情:) 你可以只隐藏地图和显示tableView,或者反过来。如果您想实现单击单元格以在地图上显示某些图钉,您也可以这样做。但在这种情况下,您可能需要考虑创建另一个 UIViewController 来处理此问题,因为您可能希望在下面显示地图和其他一些信息,并且根本不使用 tableView。这完全取决于您到底想要达到什么目标。
【解决方案2】:

这听起来像是拯救这里的继承。

如果您有一个用于“Following”的 UISegmentedControl 和另一个用于“您”的 UISegmentedControl,那么最好的架构可能是使用继承并为每个 UISegmentedControls 提供两个单独的控制器,名称为 FollowingSegmentedViewControllerYouSegmentedViewController,这样您的单独控制器就知道他们正在加载和使用的数据类型(“您”数据或“关注”数据)以及您的“您”UIView 和“关注”UIView 之间的其他特殊考虑或差异一个是地图,一个是表格。

然后对于常见的 UISegmentedControl 函数和属性,您有一个基类,您的 FollowingSegmentedViewControllerYouSegmentedViewController 继承 都来自,将其命名为 BaseSegmentedViewController 或任何适合您的应用程序和架构的名称.

这种继承允许您在 FollowingSegmentedViewControllerYouSegmentedViewController 之间共享公共 UI 元素(通过 @outlets)和其他方法/功能,但还可以解决两者之间的差异,特别是在它们不同的控制器中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-02
    • 1970-01-01
    • 2011-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多