iOS创建一个可重用的视图

iOS创建一个可重用的视图,ios,view,storyboard,reusability,Ios,View,Storyboard,Reusability,我正在尝试创建一个带有nib和attendant.h/.m文件的自定义视图,然后通过IB创建该视图的多个实例,并将它们用作另一个视图的子视图 我创建了.h/.m文件 我创建了xib 对于xib,我在IB中指定类名 向xib添加一些标签(其值将通过编程方式更改) 我将情节提要中的一个简单视图拖动到容器视图中 我将被拖动视图的类设置为我为xib指定的类 我多次执行第5步和第6步,每个视图一次。最终,我会将这些视图连接到父视图类上的IBOutlets 显然我做错了什么,因为我没有在自定义视图中看到我的

我正在尝试创建一个带有nib和attendant.h/.m文件的自定义视图,然后通过IB创建该视图的多个实例,并将它们用作另一个视图的子视图

  • 我创建了.h/.m文件
  • 我创建了xib
  • 对于xib,我在IB中指定类名
  • 向xib添加一些标签(其值将通过编程方式更改)
  • 我将情节提要中的一个简单视图拖动到容器视图中
  • 我将被拖动视图的类设置为我为xib指定的类 我多次执行第5步和第6步,每个视图一次。最终,我会将这些视图连接到父视图类上的IBOutlets

    显然我做错了什么,因为我没有在自定义视图中看到我的标签。我怀疑我需要直接将nib与视图相关联,就像您对集合/表视图所做的那样,但我还没有找到在何处执行此操作


    正确的方法是什么?我想我可以通过编程方式添加视图,但是如何处理各种设备(例如iphone 4和iphone 5)的布局?

    您不能在xib中创建视图并在故事板中使用它。如果已经在xib文件中创建了它,则可以将其复制并粘贴到情节提要中。如果您希望它是控制器的根视图,请删除使用控制器获得的视图,并从xib中粘贴该视图。然后可以将这些视图的类更改为自定义类


    我不知道你所说的“另一个视图的子视图”是什么意思——视图没有父子关系,它是一个视图-子视图关系。此外,您通常不会(曾经?)将视图拖动到容器视图中。容器视图包含一个视图控制器,当您将容器视图添加到另一个视图时,会自动获取该控制器。该控制器是其视图中包含容器视图的控制器的子级。如果希望自定义视图显示在容器视图所在的位置,则应将该视图添加到子控制器的视图中(或将该视图替换为您的视图)。

    我在下面概述的内容似乎有效

    1) 为自定义视图创建xib和.h/.m文件。
    1a)假设您需要IBOutlets来查看要控制的元素,请在identity inspector中为文件的所有者提供在.h文件中定义的类名

    2) 在.h文件中定义一个属性

    @property(非原子,保留)ibuiview*contentView

    2a)为xib中您希望通过编程访问的所有子视图定义出口

    3) 在.m文件中,合成属性并执行以下操作

    - (void)awakeFromNib
    {
        NSLog(@"awake from nib");
        [[NSBundle mainBundle] loadNibNamed:@"yourNibName" owner:self options:nil];
        [self addSubview:self.contentView];
    }
    
    4) 将空视图从调色板拖动到情节提要中的容器中。换班 将这些视图中的任何一个添加到.h文件中定义的类名

    运行应用程序时,您应该在子视图中看到xib的内容


    5) 现在,您可以在容器视图的.h文件中定义自定义子视图实例的出口,并像往常一样在情节提要中连接它们

    是的,我指的是子视图。基本上,我希望在另一个视图中包含7个子视图,每个子视图都是同一个类的实例。我希望能够在xib中布局这7个子视图的内部组件(子视图)。编辑——我知道我无法在情节提要中看到实际的xib——我只想看到我从对象选择器(IB右下角)拖动的视图的白色轮廓,只要应用程序运行时,实际视图包含xibcontains@hvgotcodes,正如我说的,你不能那样做。您需要将xib中的视图复制并粘贴到故事板中,然后您将看到所有的内部组件。下面我概述的内容对我有用,并且符合我描述的内容。这不是真的。我一直在使用自定义笔尖和故事板。你可能想看看苹果在这个问题上说了些什么:这很好用!遗漏的一条小指令是,nib中的superview应该引用其Outlets中的“contentView”属性。注意,我想
    [[NSBundle mainBundle]loadNibNamed:NSStringFromClass([CustomView class])所有者:self选项:nil]防止了任何错误,并提供了一些结构和约定。感谢@1dayittwillmake提供关键的指令。没有这个就不行了。@AdamWaite对我来说你的绳子不行了。在运行时,它无法基于“CustomView”类定位nib,如果我理解正确,该类是设置为xib所有者的类