UIScrollView 中有多个 UIViewController 可以吗?
Posted
技术标签:
【中文标题】UIScrollView 中有多个 UIViewController 可以吗?【英文标题】:Is it ok to have multiple UIViewControllers in a UIScrollView? 【发布时间】:2012-05-29 23:41:57 【问题描述】:(我的第一个问题;)
我正在尝试实现您可以在邮件中看到的功能:其中有一个向上或向下按钮来加载上一封或下一封邮件。
在我的例子中,我有一个包含大约 100 个条目的 UITableView,如果您选择一行,则会加载一个巨大的空 UIScrollView。并显示在加载 DetailView 的右侧偏移处。在这个巨大的滚动视图(启用分页)中,每个页面都是屏幕的大小。 DetailView 包含一个 UIScrollview,其中显示了内容(文本)和一些按钮(邮件、Safari 中的打开链接等)。
我使用 (DetailView *)dequeueRecycledPage 方法,该方法使用 NSSet,因此最多有 3 个 UIViewControllers 活着。 (当前,上一个,下一个)。快速响应。
导航栏中的按钮将告诉巨大的滚动视图“scrollRectToVisible:animated:YES”,以便用户看到新视图滑入。
现在我的 DetailView 是 UIView 的子类,并且可以正常工作。但是我不希望这个 DetailView 中的按钮操作有很多委托。我宁愿让 DetailView 处理它们。 所以我想从 UIViewController 子类化我的 DetailView。 但是我们有一个巨大的空滚动视图,带有 3 个 UIViewControllers(一次只显示 1 个)。但也许苹果对此并不热衷,或者我遇到了一些麻烦。
所以我的问题归结为:
一个 UIScrollView 能否包含多个 UIViewControllers(一次只显示 1 个) 或者这是“未完成”还是完全错误?提前感谢您的帮助, G
【问题讨论】:
【参考方案1】:虽然理论上一个 UIScrollView 可以包含 3 个不同 UIViewController 的 UIView,但这不一定是您想要完成的最佳实践。
通常,更好的设计是让您的 UIScrollView 属于 UIViewController,然后您可以将任何 UIView(或其子类)添加到您的 UIScrollView。无需创建 3 个不同的 UIViewController 并将它们的视图添加到您的 UIScrollView,您只需创建 3 个不同的 UIView 并将这些视图添加到您的 UIScrollView。
【讨论】:
嘿,谢谢。我想这是要走的路。我应该坚持 MVC 范式。 我知道我在这里聚会迟到了,但这不会打破 UIViewController 的“单一工作”的整体想法吗?我正要问一个类似的问题。我的分页滚动视图中的每个视图都与 UITableView 很复杂,并且每个视图都有自己的服务器请求等......将所有这些都放在一个 UIViewController 中似乎是错误的方法。【参考方案2】:我知道您可以在一个滚动视图中拥有两个(因此多个)视图,我工作的公司已经做过几次了。
我不确定确切的代码是什么,但您可能会想要这样的代码:
myScrollView.addSubView(viewName).
要隐藏视图,请执行以下操作:
if (logicToHideViewIsTrue)
[viewName setHidden:YES];
更多信息可以找到here
【讨论】:
【参考方案3】:通常,UIViewController 包含整个屏幕,并且一次只能看到一个。实现 Mail 应用视图的方式涉及 UINavigationController、UIViewController 和 UIScrollView。
UIViewController 应该将向上/向下按钮添加到导航工具栏。
UIViewController 有一个应该是 UIScrollView 的视图。当按下向上/向下按钮时,UIViewController 应该会收到此消息,然后告诉 UIScrollView 将其视图更改为新内容。
【讨论】:
以上是关于UIScrollView 中有多个 UIViewController 可以吗?的主要内容,如果未能解决你的问题,请参考以下文章
iOS— UIScrollView和 UIPageControl之间的那些事
将多个容器视图放在 ios 中的分页 UIScrollView 中