gpt4 book ai didi

ios - 使用带有 Storyboard 的自定义 View 而不添加两次

转载 作者:行者123 更新时间:2023-12-01 16:44:35 25 4
gpt4 key购买 nike

我正在使用 Storyboard 并尝试为不同的 ViewController 重用 View。

为此,我创建了一个自定义的 .xib ( MyCustomView.xib ) 和类 ( MyCustomView ),几乎无处不在。

在我的 Storyboard中,我将自定义 View 设置为 MyCustomView 类型。 .

MyCustomView.xib , 将 First Responder 设置为 MyCustomView .

MyCustomView.m ,我添加了以下方法:

-(id)initWithCoder:(NSCoder *)aDecoder{
if ((self = [super initWithCoder:aDecoder])){
UIView *myCustomView = [[[NSBundle mainBundle] loadNibNamed:@"MyCustomView" owner:self options:nil] objectAtIndex:0];
[self addSubview: myCustomView];
}
return self;
}

问题是, [self addSubview: myCustomView]添加一个新的 MyCustomView到现有的 MyCustomView ,所以 View 被添加了两次。

我怎样才能摆脱两者之一?

编辑

我的问题不是很清楚,所以我认为一些屏幕截图会有所帮助。

这是我的带有自定义 View 的 Storyboard。自定义类设置为 MyCustomView .
Storyboard with MyCustomView

(我还添加了灰色背景和仅用于测试目的的标签)

现在,在 MyCustomView.xib ,我将文件的所有者设置为 MyCustomView 类:
MyCustomView.xib

并为 title Label 和 imageView 添加 outlet:
MyCustomView.xib

使用上面编写的 initWithCoder 方法,这可以正常工作,除非我调试时可以看到:
MyCustomView.m
所以 self当然是 MyCustomView 类型,在 Storyboard 中选择,但它包含 2 个 subview :
  • 首先是我的 Storyboard中的测试标签
  • 二是来自MyCustomView.xib的观点,本身包含一个标签和 ImageView 。 这就是我要摆脱的观点 .
  • 最佳答案

    什么是自我?

    在这里,它是您刚刚实例化的 MyCustomView。因此,您正在向由 initWithCoder 方法创建的新 MyCustomView 实例添加一个新的 UIView(不是 MyCustomView)。

    initWithCoder 是加载 Storyboard View 时调用的方法。

    如果你想实例化一个新的 MyCustomView 在你的 MyCustomViewController 你必须打电话

    MyCustomView *newInstance = [[MyCustomView alloc] init];
    [self addSubview:newInstance];

    其中 self 是 Storyboard 中 MyCustomViewController 的实例。

    编辑

    好的,我更理解你的问题。
    如果你想加载 MyCustomView nib 文件,你不需要为它创建一个类(除非你有你想要访问的特定变量。
    只需在此处执行您正在执行的操作,但在 View Controller 中,这将是 self. :)

    您可能想看看: How to load a UIView using a nib file created with Interface Builder

    编辑 2

    好的,我想我明白了:
  • 删除 Storyboard 中的 MyCustomView。
  • 创建一个 MyView 类或附加到 Storyboard 中名为“View”的 View 的任何内容。
  • 在你的类的 init 方法中,你实例化你的 MyCustomView Nib
  • 像你做的那样将生成的 UIView 添加到 View 堆栈中。

  • self 将是 MyView(出现在 Storyboard 中),MyCustomView 不会出现在 Storyboard 中,而是在 MyView.h 的 init 方法中以编程方式创建

    您必须以编程方式添加约束。这是一个有用的帖子: Adding View Programatically With Auto Layout Gives 'NSGenericException', reason: 'Unable to install constraint on view

    关于ios - 使用带有 Storyboard 的自定义 View 而不添加两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21069837/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com