在故事板中创建独立视图以便以编程方式使用

时间:2013-01-03 13:07:42

标签: objective-c ios xcode uistoryboard

我正在尝试使用故事板创建和设计UIView,但是以编程方式将其包含在UIActionSheet中。这基本上是为了避免使用带有像素的CoreGraphics定位功能

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

该视图显然必须连接到类,因此它将具有IBOutlet,但不会添加到self.view

让我觉得这应该是可能的一件事是,如果你将UIView拖入故事板中的控制器黑条,它会像这样弹出到位:

Snapped in UIView

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

2 个答案:

答案 0 :(得分:15)

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

  1. 右键单击导航器区域中的某个位置,然后选择“新建文件...”。
  2. 从右侧列表中选择“用户界面”,然后选择“查看”。
  3. 点击“下一步”,“下一步”,为新视图指定名称,然后点击“创建”。
  4. 新的.xib填充将添加到您的项目中。
  5. 双击新的.xib文件,它将在Interface Builder(而不是Storyboard)中打开。
  6. 根据自己的喜好编辑/设计视图。
  7. 然后在Interface Builder中获得新视图(.xib)之后,只需创建UIView的新子类( ex.MyView ),切换新视图的类( .xib)到MyView,在控制器中创建MyView实例,并将其作为子视图添加到其他视图中。


    *要回答关于底部 小黑条 的问题,它被称为“Dock”,它只是顶级的迷你代表你现场的文件。该扩展坞便于快速拖放图标并建立连接。请参阅apple的故事板描述here。 Ray Wenderlich在故事板here上有一个易于学习的教程。

答案 1 :(得分:6)

在故事板上,UIView之外不能有UIViewController。我猜这是因为故事板不知道如何识别或实例化当前的API。这是我对自己有用的东西。解决方案只是使用一个UIView的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 Document Outline example