使用Storyboard自定义视图

znq*_*znq 96 storyboard xib ios

在复杂的屏幕(视图控制器)中,我曾经将整个事物分成小块(我称之为小部件).这些小部件基本上由一个MyWidget.h和一个MyWidget.m文件以及一个MyWidget.xib文件组成,其中根元素是a UIView,而MyWidget类是UIView的文件所有者.在这个小部件的init中,我做了一个loadNibNamed.

在我的View Controller中,然后执行a [[MyWidget alloc] init],我将其作为子视图添加到View的Controller主视图中.到目前为止,这完美地运作.

我现在想知道,如何对故事板做同样的事情,因为我无法真正开始拖入UIView某个地方,我总是要从一个开始UIViewController,我不想这样做.

如果使用Storyboard无法做到这一点,我可以简单地使用故事板进行主屏幕和segue,并使用单独的.xib文件来定义自定义视图吗?

nio*_*ioq 188

将窗口小部件/视图放在单独的.xib文件中是有效的,尤其适用于您可能希望从多个视图控制器引用同一视图的情况.

但是,有时您确实希望在同一个故事板中看到其他视图/小部件,这是可能的.这是你如何做到的:

  1. 在IB中选择视图控制器(单击视图下方的黑色条),然后将UIView从对象库拖到黑条中:

    在此输入图像描述

  2. 当视图位于黑色条形图中时,它会像IB中的任何其他视图一样进行实例化,但只有在代码中执行此操作后才会添加到视图层次结构中.如有必要,更改视图的类以匹配您自己的子类:

    在此输入图像描述

  3. 您可以将它连接到视图控制器,就像连接任何其他视图一样: 在此输入图像描述

  4. 添加的视图显示在您的文档大纲中,您也可以在其中连接操作和引用:

    在此输入图像描述


现在,仍然存在的问题是,无论您尝试单击或双击多少次,您都无法实际看到视图,这会使将其置于同一故事板中的全部目的失败.幸运的是,我知道有两种解决方法.

第一种解决方法是将视图从黑条拖回视图控制器的视图,编辑它,然后在完成后将其拖回黑条.这很麻烦但很可靠.

另一种解决方法更挑剔,但我更喜欢它,因为它让我可以同时看到我的所有观点:

  1. 将UITableView从对象库拖到新添加的视图中.
  2. 然后将UITableViewCell拖入该UITableView.

    在此输入图像描述

  3. 一旦你这样做,你的视图会在旁边神奇地弹出,但你有一个你不想要的UITableView.您可以将其大小调整为0x0,也可以将其删除,并且您的UIView(通常)仍会保持可见状态.

  4. 偶尔,次要视图将再次隐藏在IB中.如果删除了UITableView,则可以重复上述步骤,或者如果UITableView仍在层次结构中,则只需单击UITableViewCell,视图就会再次出现.

第二种方法适用于UIViews但对UIToolbars不太好用UIButtons是不可能的,所以当你需要包含许多不同的子视图时我发现的最干净的解决方案是将一个辅助UIView作为容器连接到你的视图控制器.永远不会显示,将所有次要视图放在那里,并使用UITableViewCell技巧使一切都可见.我将我的虚拟UITableView调整为0x0以使其不可见.这是一个截然不同的截图:

在此输入图像描述

  • 虽然这是一个令人难以置信的令人钦佩的历史答案,但现在它已经完全过时了.Apple通过引入"容器视图"解决了整个问题,现在这是制作应用程序时所做的核心基本操作 - 所有这些都是"容器视图".谢天谢地,现在很容易! (7认同)
  • Dang,我更喜欢创建一个单独的xib.当我必须在6个月内更新应用程序时,我可能不会记住这一切. (2认同)

tip*_*low 11

如果你只是想让你的视图控制器在其他地方(而不是在你的故事板中),那么有一个非常简单的方法来完成这个:

1)像往常一样用他们的个人创建你CustomViewController的(abcdController在我试过的代码中)xib.

2)在故事板上添加一个UIViewController(或者你的超类CustomViewController).

3)将CustomClass设置为CustomViewController而不是UIViewController如下所示:

在此输入图像描述

4)最后,在你的viewDidLoad,加载自定义xib,你就完成了.

- (void)viewDidLoad
{
    [super viewDidLoad];
    [[NSBundle mainBundle] loadNibNamed:@"abcdController" owner:self options:nil];
    // Do any additional setup after loading the view from its nib.
}
Run Code Online (Sandbox Code Playgroud)

  • 感谢您非常详细的解答,但我实际上并不是在寻找自定义视图控制器,而是一个自定义视图(小部件),它被添加到标准的UIViewController中.所以视图控制器不是问题,但我想知道创建自定义小部件的最佳方法是什么.要么A)像我之前那样做,用.xib文件或B)其他一些我不知道的方法,但是:-) (3认同)

归档时间:

查看次数:

66760 次

最近记录:

9 年,8 月 前