16

我正在尝试UIView使用情节提要创建和设计一个,但以UIActionSheet编程方式将其包含在其中。这基本上是为了避免使用带有像素的CoreGraphics定位函数

在旧的 xcode 中,我记得可以在没有任何控制器的情况下将 UIView 拖到笔尖上。

视图显然必须连接到类,所以它会有一个 IBOutlet,但不会被添加到self.view

让我觉得这应该是可能的一件事是,如果您将 UIView 拖到情节提要中的控制器黑条中,它会像这样弹出到位:

在 UIView 中捕捉

但它没有显示在屏幕本身上。这个功能有什么用?我可以以某种方式打开这个视图并设计一下吗?

4

2 回答 2

15

只需创建一个新的 .xib 文件。

  1. 右键单击导航器区域中的某处并选择“新建文件...”。
  2. 从右侧列表中选择“用户界面”,然后选择“查看”。
  3. 单击“下一步”、“下一步”,为您的新视图命名,然后“创建”。
  4. 一个新的 .xib 填充将添加到您的项目中。
  5. 双击新的 .xib 文件,它会在 Interface Builder(不是 Storyboard)中打开。
  6. 根据自己的喜好编辑/设计您的视图。

然后在 Interface Builder 中获得新视图 (.xib) 后,只需创建 UIView 的新子类(例如 MyView),将新视图 (.xib) 的类切换到 MyView,创建MyView 在您的控制器中,并将其作为子视图添加到您的其他视图中。


*为了回答您关于底部那个小黑条的问题,它被称为“Dock”,它只是您场景的顶级文档的迷你表示。该扩展坞便于快速将图标拖放到上面并建立连接。在此处查看苹果的故事板描述。Ray Wenderlich 在这里有一个易于理解的故事板教程。

于 2013-01-03T13:12:41.070 回答
8

故事板上不能有 a 的UIView外部UIViewController。我猜这是因为故事板不知道如何识别或实例化当前的 API。这是我自己用过的东西。解决方案是只使用一个 XIBUIView并以编程方式加载它(就像以前一样)。我发现对大多数项目使用情节提要,而将 XIB 用于跨多个视图控制器的可重用视图确实可以很好地协同工作。

这是我用来加载 XIB 作为自定义对象的一部分的一些代码,该对象被初始化。

- (id)initWithFrame:(CGRect)frame {
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
        [[[NSBundle mainBundle] loadNibNamed:@"BannerView" owner:self options:nil] objectAtIndex:0];
        [self addSubview:self.view];
        self.frame = self.view.frame;
    }
    return self;
}

至于将视图拖到故事板上的黑条中。这些视图仍然是 的一部分UIViewController,但它们不是顶级视图的“子视图”。我认为文档大纲很好地显示了层次结构。

以下视图在我的主视图层次结构之外有 2.1.1 视图、2.1.2 视图等,因为它们不是我的主视图的子视图。结果是,默认情况下它们不会显示。我确实有IBOutlets设置,我有条件地使用标准addSubview:removeFromSuperview.

IB 文件大纲示例

于 2013-01-03T13:38:06.037 回答