【发布时间】:2014-04-19 05:20:40
【问题描述】:
我正在创建一个简单的小弹出视图,类似于按下音量按钮时出现的弹出窗口。我想在不同的视图控制器中显示该弹出视图的实例。我一直在考虑几种方法,但我想知道什么是最佳方法,同时考虑到 MVC、复杂性和其他“良好”实践。
目前,我正在我的 UIViewController 中创建和显示此 UIView。我证明了这种方法是合理的,因为它真的是一个小视图,我用它做了很多工作来修改它在那个 VC 中的行为,所以代码已经在 VC 中了。本质上,我制作了一个框架,设置背景,应用圆角半径,添加文本,应用运动效果,然后使其淡入然后淡出。我可以将代码复制并粘贴到我的其他 VC 中,但这显然是一种不好的方法。
我可以创建一个 UIView 的子类,并且我确信我可以使用 drawRect 来绘制它,但是我不确定如何将该视图正好添加到 VC 的中间,除非我拖出一个视图到我的风投并改变它的类别。但是如果我这样做了,无论如何我都可以在 Interface Builder 中完成大部分工作,这将是首选,尤其是如果我可以使用 Auto Layout 始终保持居中。但是,我需要将该 UIView 复制并粘贴到每个 VC 中并将其隐藏 - 这听起来不太好。
我可以创建 UIView 的子类,而不是使用 drawRect 进行绘制,而是实现一个创建 UIView 并返回它的方法。然后在 VC 中,我只需调用该方法并将它返回的视图添加为子视图。我从来没有这样做过,我不确定这是否合适。
实现这种可以从我的任何 VC 屏幕上显示的视图的可行方法是什么?谢谢!
请注意,此视图应始终保持相同大小,位于屏幕中心,不与任何特定 VC 绑定。它应该保持在屏幕上,不受过渡等的影响。它非常模仿音量弹出窗口。
【问题讨论】:
-
如果此弹出视图在整个应用程序中只有一个目标(而不是特定的视图控制器),则子类化(单例方法)是最好的。即使它具有特定于视图控制器的操作,只需对
delegates 进行一些编码,您就可以轻松地在任何地方重复使用它。另一种选择,如果您希望它在屏幕上的相同位置持续存在,而与视图/控制器(和转换)无关,您可以将代码添加到 appDelegate,并将视图添加到应用程序的窗口,而不是视图控制器。然后,您可以从每个 VC 调用 appDelegate 的方法来处理此弹出窗口。 -
我很难想象比上面 n00bProgrammer 的评论更糟糕的建议。辛格尔顿?真的吗?不要走那条路。
-
确实,弹出窗口确实需要通过转换持续存在 - 它不是特定于任何 VC。不过,将它放在应用程序委托中“感觉”是错误的。
标签: ios objective-c uiview uiviewcontroller