我正在修补一个iPad应用程序(像许多iPad应用程序一样)不使用UInavigation根视图控制系统,因此我没有每个应用程序“视图”的自然所有权。我本质上有两个基本视图:文档列表视图和文档编辑视图。

我正在使用Uiview Animation从选定的文档到编辑视图。

我的顶部还有一个工具栏,两个“视图”中都存在(带有不同的按钮)。

因为我没有为我进行演出的Uinavigation,所以我倾向于将越来越多的东西扔到一个笔尖和一个拥有整个容器的一个视图控制器中。但是现在,我试图弄清楚如何从文档列表视图中查看编辑视图,如果编辑视图在其他笔尖中存在,也可以保留工具栏。

有人在这样的应用结构上有想法或经验吗?我发现除了琐碎的单屏应用程序或全面导航应用程序外,有关代码/UI结构的最佳实践缺乏的文档。

根据文档,您并不是要让父母/子查看控制器拥有相同“屏幕”的子组件,但这意味着一个基本上包含整个应用程序的大型Honking View Controller,这是不对的。

不确定是否有“正确的答案”;我正在寻找一些聪明的例子或建议。几个月来,没有人会感动这个问题,所以我添加了一个赏金来产生良好的chat不休。 :)

谢谢!

更新: :我不是在谈论拆分视图,显然是由拆分视图控制器很好地处理的。相反,请查看具有文档列表视图和独立编辑视图的Apple的IWork应用程序(例如页面),但这些视图是通过动画相关的。

也许这里真正的问题是:您(或您甚至可以?)如何构建一个“容器”视图控制器,例如Split View或Navigation Controller,您自己?您是否需要从头开始构建整个该死的东西?我感觉到您是,因为在视图控制器之间的交互作用中似乎是隐藏的接线。如果是这样,对此有何想法?

有帮助吗?

解决方案

我认为查看控制器中唯一的隐藏接线是设置ParentViewController,这是支持拆分和导航的类别所必需的。

视图控制器设计为嵌套,每个控制器都拥有视图层次结构的一部分。唯一的设计目标是,没有视图控制器进入另一个控制器的视图层次结构。父视图控制器通常会呼吁添加子控制器,以便它可以在其拥有的视图层次结构中设置视图框架。儿童视图控制器不应对其控制的视图的监督做任何事情,因为另一个控制器拥有。不应该设置其控制的视图的中心或框架。

例如,导航控制器具有推动方法,其中它删除了先前的控制器视图,添加了新的控制器视图,并设置了新添加的视图的框架。通常,父视图控制器可以自由设置子控制器的视图框架,而不是界限。

如果您想更改导航控制器的动画,我认为您将首先使用Animated:参数实现所有方法。设置动画,然后在进行动画之前将Animated Flag关闭。

其他提示

我还没有在Uikit提供的内容(导航/Tab-bar/modal/etc)之外尝试过多视图控制器,但是我不明白为什么它不起作用。在引擎盖下,一切都是一个视图,尽管我会注意到Uikit对视图控制器具有特殊的视图,毫无疑问,该系统具有某种特殊的处理(UiviewController具有包装器视图,UinavigationController具有Uinavigation Controller具有UinavigationTransitionView等等。 。)。

我建议不要过多担心“最佳实践” - 只是编码可以做您想要的东西的东西。几个选择:

  • 将逻辑贴在视图类中(ewwww!)。我们的一个应用程序会这样做,因此它可以自定义方式处理旋转(视图滑入/输出而不是旋转)。我们可能应该改用自己的视图控制器逻辑。
  • 将模型分解为与视图相对应的组件。让每个视图都知道如何加载其组件并递归加载子组件。然后,视图控制器只需要担心“大图”的东西。

另请注意,您可以通过将其连接到一个名为EditView的插座来加载多个NIBS。

-(EditView*)editView {
  if (!editView) {
    // Loads EditView into the outlet editView
    [NSBundle loadNibNamed:@"EditView" owner:self];
  }
  return editView;
}

您还需要担心将其添加到视图层次结构中,将其卸载 - (void)viewDidunload(iPhone OS 3.0+),将其设置为 - (void)ViewDidload,以防在编辑模式,编辑模式下有内存警告ETC...

这并不容易,但是UI从来没有。

您需要使用拆分视图/popover-view实现的主尾视图,并用UisplitViewController控制。

主视图是文档列表,详细信息是编辑视图。每个都有自己的控制器。两个控制器本身由UisplitViewController管理。

如果您不使用SplitView Controller,您将最终将手动编码非常类似于它。这确实是在API中轻松完成您想要的工作的唯一方法,这是iPad用户期望的布局。

创建拆分视图接口 在iPad编程指南中有关详细信息。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top