标签栏、导航栏和段控制的设计问题

Posted

技术标签:

【中文标题】标签栏、导航栏和段控制的设计问题【英文标题】:Design Issue with tab bar, nav bar & segment control 【发布时间】:2011-06-08 16:50:37 【问题描述】:

这更像是一个要求而不是一个问题。 有一个标签栏控制器,在标签栏控制器的其中一个控制器中有一个导航控制器。在它下面有一个段控件,我必须在表格视图中显示一些数据(我将通过 URL 连接获得)。在从段控件更改段时,表的内容将发生变化。并且段控件改变了表格中显示的数据类型,甚至 UITableViewCells 也不同。所有三个段都将在表格中显示数据。

一种可能的解决方案是更改数据并在更改段时重新加载表。 其他解决方案是在更改段时更改视图(将具有三个不同的视图控制器),这些视图控制器将在那里实现自己的表委托并具有独立的表视图。

我想第一个效率更高。第二个将使所有内容(代码)与不同的部分分开。但是有一些问题,导航控制器在内部视图控制器中是不可访问的。

谁能建议我最好的解决方案? 感谢您的建议。

【问题讨论】:

如果您在委托单例中保留对导航控制器的引用,当然可以访问内部 VC 中的导航控制器。我做了一些非常相似的事情(在某种程度上,选项 2 为每个表使用单独的 VC),看起来很糟糕,我认为最好的方法是为每个表使用不同的数据源,但单独的控制器工作正常。 切换数据源可能是最好的选择。相比之下,就效率而言,切换视图控制器在应用程序上可能非常麻烦 是的,我更喜欢第二个选项,但问题是在使用外部导航控制器弹出后,我没有在内部 VC 中调用 viewWillAppear。您能否详细说明使用不同的数据源。 【参考方案1】:

我对此进行了很多研究,最终决定更改单个 TableView 的数据源。我只有两个段,单元格类型,fetchedResultsControllers 等,它仍然是一个相当重的自定义 TableViewController。延迟加载图片,如果你需要这样做,也有点痛苦。

我不需要为各个表视图处理导航控制器,但如果这对您很重要,那么第二种方法可能是最好的。尽管有上述情况,但第一种方法在成功后效果很好。不过有兴趣听到更好的模式。

【讨论】:

以上是关于标签栏、导航栏和段控制的设计问题的主要内容,如果未能解决你的问题,请参考以下文章

组合标签栏和导航栏控制器出现问题

iOS MapView 位于导航栏、状态栏和标签栏控制器下

移动开发中导航栏和搜索栏在设计中应该注意哪些问题?

使用标签栏和导航实例化深度视图控制器

如何在视图控制器中的标签栏和导航栏上全屏显示弹出视图?

标签栏和导航控制器应用程序中的状态恢复