【问题标题】:how do i create a custom uiview from a xib如何从 xib 创建自定义 uiview
【发布时间】:2016-06-09 00:27:23
【问题描述】:

我最近参与了一个项目,高级工程师创建了一个自定义标签栏。他完全去掉了传统的标签栏,取而代之的是自己的。查看代码,我可以看到他创建了文件 HOFooterBar.h、HOFooterBar.m 和 HOFooterBar.xib。在 .xib 文件中,他画出了在界面生成器中的页脚应该是什么样子。他继承了 UIView 类。在 .h 文件中,他为该类创建了一个协议,以便可以从视图中给出的操作中获取命令。在主视图控制器上,他只是在它所属的位置添加了一个 UIView,并在身份检查器中将类更改为 HOFooterBar。

这是我可以看到的,但我试图在我自己的代码中重现结果,但它不起作用。我添加到我的视图控制器的 UIView 只是显示为白色。有一次,我手动将 UIView 添加到我的代码中(没有 IB)并且它起作用了。但我需要能够从界面生成器中添加它。任何想法如何实现这一点,为什么它对我不起作用?如果我不够清楚,我愿意接受更多问题

【问题讨论】:

  • 你这样做了吗[self.view addSubview:yourButton]; ?
  • 不,我希望从界面生成器中完成所有工作。我没想到必须以编程方式将其添加到子视图中。通常,在 IB 中,如果您从代码中添加按钮,则不必执行该行。如果我这样做,它会起作用。但我想更改身份检查器中的视图并在之后显示
  • 您是从笔尖加载视图吗?我会做类似yourTabBar = [[[NSBundle mainBundle] loadNibNamed:@"YourTabBar" owner:self options:nil] objectAtIndex:0]; 然后self.view addSubview:yourTabBar]
  • 如果我这样做,它会起作用。但我希望能够更改身份检查器中的 uiview 并让它加载而不是像那样以编程方式加载它

标签: ios objective-c uiview interface-builder


【解决方案1】:

要使用 .xib 创建视图,我们可以使用以下步骤

  1. 创建自定义 UIView 子类
  2. 创建 custom.xib 并从身份检查器设置自定义类
  3. 如下创建自定义视图实例
UINib *nib = [UINib nibWithNibName:@"YourCustomView" bundle:nil];
YourCustomView *view = [[nib instantiateWithOwner:self options:nil] objectAtIndex:0];
  1. 使用
  2. 将视图添加到其超级视图
[self.view addSubview:view];

Here 是同一个参考问题

【讨论】:

    【解决方案2】:

    因此,一旦您编写了自定义视图(确保它继承自 UIView) 您可以转到主 xib,并在右下角确保您选择了对象(立方体事物),然后搜索自定义视图。从那里,您可以将该自定义视图拖到您的主视图中——然后在身份检查器中将该自定义视图分配为您的自定义视图类的一个实例。

    如果自定义视图的内容是以编程方式创建的(这听起来就像您的高级工程师朋友在他的头文件/实现文件中所做的那样),那么自定义视图将在您的 xib 中显示为空,并且在运行时自定义视图将填充以编程方式提供给它的内容。

    【讨论】:

    • 希望我正确理解了您的问题,如果我有什么问题请告诉我
    • 所以我尝试将 UIView 对象拖到 IB 上,单击它,转到身份检查器,并将名称更改为我的标签栏的名称。当我这样做时,它显示为空白。但是,如果我进入我的代码并编写 footer = [PAFooterBar alloc] init]; [self.view addSubview:footer];然后它工作。我希望它可以工作而无需更改代码。只需拖动视图,在身份检查器中更改名称,即可完成。有可能吗?
    • 嗯...尝试转到连接检查器,并将引用出口设置为您的“自我”AKA 父视图?
    猜你喜欢
    • 1970-01-01
    • 2017-10-01
    • 2015-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-02
    • 2015-04-17
    • 1970-01-01
    相关资源
    最近更新 更多