Ios 创建要在多个UIViewController中显示的UIView

Ios 创建要在多个UIViewController中显示的UIView,ios,objective-c,uiview,uiviewcontroller,Ios,Objective C,Uiview,Uiviewcontroller,我正在创建一个简单的小弹出视图,类似于按下音量按钮时出现的弹出窗口。我想在不同的视图控制器中显示该弹出视图的一个实例。我一直在考虑几种方法,但考虑到MVC、复杂性和其他“好”实践,我想知道什么是最好的方法 目前,我正在UIViewController中创建并显示此UIView。我证明了这种方法的合理性,因为它实际上是一个小视图,我用它做了很多工作来修改它在VC中的行为,所以代码已经在VC中了。基本上,我制作一个框架,设置背景,应用角半径,添加文本,应用运动效果,然后使其淡入淡出。我可以将代码复制

我正在创建一个简单的小弹出视图,类似于按下音量按钮时出现的弹出窗口。我想在不同的视图控制器中显示该弹出视图的一个实例。我一直在考虑几种方法,但考虑到MVC、复杂性和其他“好”实践,我想知道什么是最好的方法

目前,我正在UIViewController中创建并显示此UIView。我证明了这种方法的合理性,因为它实际上是一个小视图,我用它做了很多工作来修改它在VC中的行为,所以代码已经在VC中了。基本上,我制作一个框架,设置背景,应用角半径,添加文本,应用运动效果,然后使其淡入淡出。我可以将代码复制并粘贴到我的其他风投中,但这显然是一种糟糕的方法

我可以创建一个UIVIEW的子类,我确信我可以使用DrReCut来绘制它,但是我不能确切地知道如何将中间视图完全添加到VC中,除非我把视图拖到我的VCS并改变它的类。但如果我这样做了,我可以在Interface Builder中做任何事情,这将是首选,尤其是如果我可以使用自动布局来始终保持其居中。但是,我需要将UIView复制粘贴到每个VC中并隐藏它——这听起来不太好

我可以创建UIView的子类,而不是使用drawRect绘制,实现一个创建UIView并返回它的方法。然后在VCs中,我只调用该方法并添加它作为子视图返回的视图。我从来没有这样做过,我不确定这是否是一个合适的方法

什么是一个可行的方法来实现这样一个视图,可以从我的任何风投投屏幕上抛出?谢谢

请注意,此视图应始终保持相同大小,位于屏幕中央,不与任何特定VC绑定。它应该保持在屏幕上,不受过渡等的影响。它与弹出的音量非常相似

我想在多个视图控制器中显示相同的弹出窗口

我想您的意思是希望在多个视图控制器中有同一类的单独实例。给定视图只能有一个superview,因此一次不能在多个视图中存在

我不确定如何将该视图添加到中间的VC中

很容易将视图居中放置在其superview中。若要水平居中,请从父视图的宽度中减去视图的宽度。将结果除以2。这是你的X坐标。Y坐标也是一样的,只是你显然会使用高度

更简单的方法是通过将superview的宽度和高度分别除以2来创建点。将视图的“中心”属性设置为该点

什么是一个可行的方法来实现这样一个视图,可以从我的任何风投投屏幕上抛出

不要尝试重用同一视图。这是没有必要的,尝试在控制器之间传递它会使代码变得非常复杂。只要让任何需要显示弹出窗口的控制器创建自己的副本即可

请记住,视图是存储在模型中的数据的接口-它们可以显示数据或让您与模型交互,但它们不应该存储应用程序状态本身。因此,没有理由需要在多个视图控制器中使用相同的视图。只要弹出窗口从正确的位置获取数据,您就可以拥有任意多的实例


如果弹出窗口确实与任何视图控制器的内容分离,另一种可能的策略是使用视图控制器包含。您可以创建一个视图控制器,只处理应用程序范围内的内容,如此弹出窗口,并让它加载和卸载各种其他视图控制器作为其子对象。不过,我还是要提醒大家不要尝试这种方法,因为它可能比你需要的更复杂,而且肯定比你现在应该尝试的更复杂,因为你似乎仍在寻找你的“海之腿”。

这听起来像是你在寻找的东西。也可能有帮助。

如果此弹出视图在整个应用程序中只有一个目标,而不是特定的视图控制器,那么子类化singleton方法是最好的。甚至,如果它具有视图控制器特定的操作,只需为代理编写一点代码,您就可以轻松地在任何地方重用它。另一个选项是,如果您希望它保持在屏幕上的相同位置,而不考虑视图/控制器和转换,您可以将代码添加到appDelegate,并将视图添加到应用程序的窗口,而不是视图控制器。然后,从每个VC,你可以调用appDelegate的方法来处理这个弹出窗口。我很难想象比上面n00bProgrammer的评论更糟糕的建议。单身汉?真正地事实上,弹出窗口确实需要在转换过程中保持不变——这不是任何VC所特有的。“感觉”不对
把它放在应用程序代理中。很抱歉没有说得更清楚。事实上,我确实想要它的多个实例,而不是试图重复使用同一个确切的视图。创建一个实例,显示它,让它在几秒钟后消失。我想对它进行编码,这样我就可以将我想要显示的字符串传递给它——例如,成功或失败。我只是不确定该采取哪种方法来实现它。保持简单。例如,在你可以使用UILabel的地方使用标准部件。我喜欢简单。那么,它是否应该只是一个单独类中的常规方法,创建一个UIView并返回它——不需要是UIView的子类?