使用 UIViews 而不是 UIViewControllers 时可能出现的问题?

Posted

技术标签:

【中文标题】使用 UIViews 而不是 UIViewControllers 时可能出现的问题?【英文标题】:Issues that can arise when using UIViews instead of UIViewControllers? 【发布时间】:2016-03-05 07:20:32 【问题描述】:

我一直在尝试找出使用 UIViews 而不是 UIViewControllers 时可能出现的问题,但一直找不到任何问题,因此当出于某种原因通常建议使用 UIViewController 时,我一直在使用自定义 UIViews。

我更喜欢 UIViews 主要是因为据我所知,在为过渡制作自定义动画时,它们更容易操作。如我错了请纠正我。 此外,我以编程方式自定义所有内容,例如标签栏、导航栏等,因此对我来说,自定义 UIView 可以完成 UIViewController 所做的一切......

那么,使用单独的自定义 UIView 而不是新的 UIViewController 有问题吗?如果有,请赐教..!

编辑

我知道 MVC 模型,并且 UIViews 而不是 UIViewControllers 我的意思是忽略每个屏幕的整个 UIViewController 并使用 UIView 作为某些屏幕的所有对象的容器。

例如,当显示菜单屏幕时,我没有将 UIViewController 拉到它自己的“部分”,而是根本不做 UIViewController 而是使用作为容器的自定义 UIView 来做,绘制/添加所有内容在那里。其余“部分”也是如此。(设置、选项等)

这有问题吗?

【问题讨论】:

【参考方案1】:

我一直在试图弄清楚使用UIViews 而不是UIViewControllers 时会出现什么问题

一般不能这样做,因为视图对象和视图控制器对象在 Model-View-Controller 层次结构中占据不同的位置。它们甚至不是一对一的,因为单个控制器通常管理多个视图。

我更喜欢UIViews,主要是因为据我所知,在为过渡自定义动画时,它们更容易操作。

在某个功能可以合理地进入视图或视图控制器的情况下,它很可能属于视图,而不是视图控制器,因此您的观察是正确的。可以封装在单个 UIView 中的自定义动画应该封装在 UIView 中,即使相同的代码也可以放在 UIViewController 中。

【讨论】:

@durazno 对我来说,编辑并没有太大改变问题:如果你可以在两个地方都这样做,你应该在视图中这样做。 真的吗?我在这里阅读了博客和 cmets,它们强烈反对在应用程序中有部分更改时使用 UIView,即使它们没有给我任何令人信服的信息,表明它实际上是有问题的。比方说,从菜单到游戏板。人们似乎声称从 MenuVC 到 GameVC 是唯一可接受的方式,我不明白为什么我不能只使用自定义视图。所以你说在可能的情况下使用自定义视图实际上更好? @durazno 如果您可以为您的菜单制作一个自定义视图,并使用一个封装其与应用程序其余部分交互的视图委托来完成,那就是要走的路。想想UITableViewios 设计人员在这里很好地分离了关注点,让UITableView 担心渲染和与用户交互,而应用程序担心提供表格查看其数据 - 通常通过视图控制器中的一些代码.如果您可以为您的MenuView 进行同样的干净分离,那么您应该这样做。如果你做得好,你将能够重用很多代码。 太棒了!对此感到非常沮丧,因为我不知道为什么我不能做我正在做的事情。谢谢!

以上是关于使用 UIViews 而不是 UIViewControllers 时可能出现的问题?的主要内容,如果未能解决你的问题,请参考以下文章

延迟切换uiviews

像 UIViews 一样在其他 UIViewController 中“嵌套”ViewController 是不是明智?

iOS iPhone 是不是可以克隆 UIView 并将其绘制到两个 UIViews 上?

为啥 -drawRect 比为 UITableViews 使用 CALayers/UIViews 更快?

如何像 UITableView 那样重用 UIViews?

如何使 UIViews 按比例增长