6

在 iPhone 上实现看起来像 Web 应用程序的选项卡的最佳方法是什么,如下面的屏幕截图(注意“Checkin-Info-Friends”选项卡)?这些不是 UIKit 标准库的一部分,但最近似乎很常见。

我花了相当多的时间为 iPhone 开发应用程序,但没有开发类似的控件。这里最好的方法是什么:

  • 为每个标签内容创建一个新的 UIView,并立即将三个子视图添加到主视图?
  • 仅当用户单击每个选项卡时才创建新的 UIViews?
  • 将所有内容放在 UIScrollView 中,并在用户单击每个选项卡时更改页面?

也许那里有开源控件?我什么也找不到。

替代文字
(来源:foursquaregame.com

4

4 回答 4

3

我解决类似问题的方法是创建所有 4 个(在我的情况下)选项卡视图,但通过释放除当前选项卡视图之外的所有选项卡视图来响应 didReceiveMemoryWarning。(然后,当然,您必须确保在用户选择新选项卡时创建新视图,如果它不存在。)

我认为这是一个很好的折衷方案——一开始对用户做出快速反应(在我的情况下,我的应用程序中的内存占用是最低的),然后是对内存不足的响应以避免被枪杀。

于 2009-12-16T15:34:29.430 回答
1

我认为最好只在父视图或视图控制器中拥有对子视图的三个 UIView* 引用,所有这些最初都是空的,然后让子例程隐藏其他两个视图(如果它们是可见的)并构造并显示或只显示新的看法。假设没有特别的内存需求。

我认为对于子视图级别的这么小的屏幕区域加载/卸载问题不太可能成为问题,但是如果需要加载/卸载父视图,则子视图应该全部消失(隐藏和卸载),然后重新加载,loadView 应该在启动时调用上一段中描述的例程。

如果三个子视图中的任何一个实际上使用了大量内存或资源,那么我的建议是相反的,每个子视图和/或它们后面的任何内存密集型对象不仅应该隐藏,而且应该尽可能卸载。我认为您在那里使用谷歌地图时,可能需要在隐藏时卸载。

这是正确的观点吗?我缺少一些额外的细节吗?

于 2009-12-16T15:34:32.800 回答
1

您可以让每个选项卡成为带有 nib 和所有内容的真实视图控制器。唯一的问题是您必须转发您想要接收的标准视图控制器调用(viewWillAppear 等),但它使编码更加清晰,因为您的编码就像您对任何其他视图一样(尽管空间更小)。

您调用每个控制器的“视图”属性来获取视图,您可以将其添加为选项卡下的容器视图的子视图。

于 2009-12-16T22:21:35.077 回答
1

如果这三个都是表格视图,您可能会使用UITableViewController基于所选选项卡更改内容的单个视图。否则,我会支持 KHG 关于使用真实视图控制器备份每个子视图的评论。

对于选项卡本身,请考虑子类化UISegmentedControl

于 2009-12-16T22:28:38.883 回答