两个UIViews,一个UIViewController(在一个UINavigationController中)

时间:2010-06-15 20:48:33

标签: iphone model-view-controller uitableview uiviewcontroller uinavigationcontroller

鉴于推送到 UINavigationController UITableViewController 的iPhone应用程序,我想添加一个右侧栏按钮项目以在表格视图和“备用”之间切换查看相同的数据。我们还要说这个其他视图使用相同的数据但 UITableView

现在,我知道Stack Overflow上已存在此问题的变体。但是,在这种情况下,该替换视图将推送到 UINavigationController 。它在视觉上类似于翻转当前 UIViewController 的表格视图并显示另一个视图,然后能够翻转。换句话说,它打算在 UINavigationController 层次结构中占据一个位置。

此外,无论您在两个视图中最终做出什么选择,都会将常见的 UIViewController 推送到 UINavigationController 堆栈。

更多信息:我们不想使用单独的 UINavigationController 来处理这对视图,我们不想通过 UITabBarController将它们分开要么。在视觉和上下文中,UX旨在显示同一枚硬币的两面。只是这两方碰巧在正常的练习中涉及他们自己的视觉控制器。

现在......事实证明我已经离开并快速设置它以了解它是如何工作的!然而,在回过头来检查它时,我得到了一个明显的印象,即我以一种非MVC的方式进行了讨论,这当然让我感到担忧。

这是我在高层做的事情。

现在,我有一个 UIViewController UITableViewController )来处理两个视图之间的所有共性,例如获取原始视图数据。我还有两个NIB,每个视图一个,以及两个 UIView 对象。 (其中一个是 UITableView ,这是一种 UIView 。)

我使用动画在视图之间切换(很容易)。此外,为了保持封装的内容,现在拆分的 UITableView (不是 UIViewController !)充当自己的委托和数据源,从中获取数据VC。 VC在表视图中设置为弱的非保留对象。同时,备用视图以完全相同的方式从VC获取原始数据。

所以,这里有一些闻起来很有趣的东西。从孩子到父母的弱联系,虽然有礼貌,但似乎可能是错误的。制作一个 UITableView 表的数据源和委托对我来说也很奇怪,认为视图控制器是你想要根据Apple的MVC图表放置的地方。就像现在一样,它看起来好像是视图知道模型,这是不好的。提前加载两个视图似乎也很奇怪,因为延迟加载不再有效。失去 UITableViewController 的好处(比如自动滚动到带有文本字段的单元格)也有点令人沮丧,我宁愿不重新发明轮子来解决这个问题。

鉴于以上所有内容,并且鉴于我们希望在单个 UINavigationController 上的单个上下文中使用“翻转效果”,并且假设两个视图都是同一个硬币的两面,有没有更好,更明显的设计方法,我只是想完全错过?线索赞赏!

1 个答案:

答案 0 :(得分:0)

我的方法如下,但我没有对此进行测试以试用它。 UINavigationController有一个属性viewControllers,它返回当前在导航控制器堆栈上的视图控制器的数组。还有一个方法setViewControllers:animated,它允许您一次设置所有导航控制器的视图控制器。当用户想要从表视图切换到备用视图时,请执行以下操作: 1.在导航控制器的堆栈上获取视图控制器阵列。 2.使用tableView或备用非表视图控制器替换最终的数组元素。 2.使用setViewControllers:animated将堆栈放回导航控制器中,顶部有所需的视图控制器。

如果需要,可以在视图控制器的viewDidLoad或viewDidAppear方法中处理翻转动画。