代码之家  ›  专栏  ›  技术社区  ›  Eduardo Scoz

iPhone的网页式标签

  •  6
  • Eduardo Scoz  · 技术社区  · 16 年前

    实现类似于iPhone上Web应用程序的选项卡的最佳方法是什么,如下面的屏幕截图(注意“签入信息朋友”选项卡)?这些不是uikit标准库的一部分,但最近似乎很常见。

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

    • 为每个选项卡内容创建一个新的uiview,并将三个子视图直接添加到主视图中?
    • 仅当用户单击每个选项卡时才创建新的ui视图?
    • 把所有的内容放在uiscrollview中,然后在用户单击每个选项卡时更改页面?

    也许外面有开源控件?我什么都找不到。

    alt text http://www.foursquaregame.com/foursquare-game-images/foursquare-game-mobile-app.jpg

    4 回复  |  直到 16 年前
        1
  •  3
  •   Jane Sales    16 年前

    我处理类似问题的方法是生成所有4个(在我的例子中)选项卡视图,但是通过释放除当前选项卡视图以外的所有视图来响应didReceiveMemoryWarning。(然后,当然,当用户选择新选项卡时,必须确保创建新视图(如果该视图不存在)。

    我认为这是一个很好的折衷方案——一开始是对用户的快速反应(在我的例子中,在我的应用程序中,内存占用在这一点上是最低的),然后是对低内存的反应,以避免被击中。

        2
  •  1
  •   martinr    16 年前

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

    我认为,对于这样一个小屏幕区域,子视图级别的加载/卸载问题不太可能是一个问题,但是如果需要加载/卸载父视图,则子视图应该全部打开(既隐藏又卸载),并且在重新加载时,LoadView应该在启动时调用上一段中描述的例程。

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

    这是正确的观点吗?我有没有遗漏一些额外的细节?

        3
  •  1
  •   Kendall Helmstetter Gelner    16 年前

    您可以让每个选项卡都是一个具有NIB和所有内容的真实视图控制器。唯一的问题是,您必须转发您想要接收的标准视图控制器调用(viewwillappear等),但它使编码变得更干净,因为您的编码方式与其他任何视图相同(尽管空间较小)。

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

        4
  •  1
  •   Frank Schmitt    16 年前

    如果这三个视图都是表视图,则可以不使用 UITableViewController 根据所选选项卡更改内容。否则我会附和KHG关于使用真实视图控制器备份每个子视图的评论。

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