【问题标题】:UIView outside of a View Controller in a Storyboard故事板中视图控制器之外的 UIView
【发布时间】:2012-07-08 07:46:14
【问题描述】:

我遇到了一个在官方文档、Stackoverflow 或 Google 上找不到答案的问题。

我是一位经验丰富的 iOS 开发人员,但对 Storyboards 不熟悉。我想在当前视图控制器上实例化一个视图,在 NIB 中,我将在视图控制器外部绘制一个视图,并附加一个插座以在代码中引用它并调用类似 addSubview: 的东西。绘制叠加层或在我目前的情况下绘制用于 MapView 委托的标注视图很有用。但我不知道如何在情节提要中做到这一点。

我似乎在视图控制器之外没有视图,而视图控制器内的视图要么必须是控制器视图的子视图,要么在 Interface Builder 中根本不可见(当您拖动在传统的 NIB 中组成的外部视图,但如果您需要调整它的最小细节,这将是一个很大的问题)。

关于做什么或去哪里看的任何提示?谢谢。

【问题讨论】:

  • 如果您想这样做,您必须在 nib 中构建视图的该部分,然后从视图控制器加载 nib 以使用该视图。
  • 是的,这就是我最终所做的。我只是想知道是否有办法在故事板中设计它。但仔细想想,将 Storyborads(与应用程序流有关)和自定义 UIViews(它们只是自定义视图类,NIB 毕竟只是实现细节)分开可能实际上是更好的设计。
  • 我将其发展为下面的完整答案:stackoverflow.com/a/11387442/364446

标签: ios xcode cocoa-touch storyboard


【解决方案1】:

似乎没有办法做到这一点。请参阅 Jason's commentthis question 解决相同的问题,尽管在不同的上下文中。

但是,在考虑我的问题的含义时,我早些时候意识到 - 正如我在决定值得完整回答之前在 my previous comment 中开始解释的那样 - 将自定义视图的设计与设计分开是有意义的的应用程序流。因此,不可能在 Storyboards 中设计自定义视图这一事实很可能是……设计使然。

自定义视图(可重用组件)与视图控制器(代表应用程序故事板中的场景)非常不同。这就像电影中的角色和场景一样。你不想在你的场景中设计你的角色,即使你碰巧只在一个场景中使用了那个角色。如果你只在一个场景中使用它是偶然的,但不是必需的。所以必须分开。

您想使用 Interface Builder 来设计自定义视图的事实只是 an implementation detail 应该封装在您的类中。应用程序故事板不需要知道,甚至不需要管理,您如何处理可重用视图的特定实现。

嗯,我希望我能有更多这样的审讯:)

【讨论】:

    【解决方案2】:

    你可以使用一个容器视图,就像一个普通的视图(你可以分配一个 IBOutlet UIView)但是你可以在你的 UIViewController 之外定义它。

    【讨论】:

    • 有趣。我坚持认为您不想每次都这样做,但是这个技巧对于某些用例(例如您的插图中显示的用例)很有用。
    • 我能够将 UIViews 放到同一个位置,然后用 IBOutlet 将它们连接起来。不需要容器视图。
    • 你能发布一个新的答案吗?也许这个已经过时了:)
    【解决方案3】:

    我自己也在想同样的事情,实际上能够做到这一点,但在搞砸之后,它就消失了。我有一个导航控制器、一个视图控制器和两个视图。我在一个单独的 nib 中开发了视图,并将它们导入到这个项目中。在连接按钮时,我正在使用的视图突然出现在我的视图控制器旁边。不幸的是,在试图让另一个视图出现时,我不知何故丢失了它,不知道如何找回它。似乎您不能将视图拖到情节提要中,只能拖到视图控制器中。但是,如果我能够做到一次,它就必须是可复制的。

    【讨论】:

    • 是的,您实际上可以将 UIView 与 UIViewController 一起放入场景中。但是你不能编辑它,甚至不能查看它,除非你把它移到 UIViewController 里面——这大大降低了它的吸引力。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-11
    • 2018-01-01
    • 1970-01-01
    • 2021-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多