我正在尝试使用nib和话务员.h / .m文件创建自定义视图,然后通过IB创建该视图的多个实例,并将它们用作另一个视图的子视图。
我多次执行第5步和第6步,每次查看我想要的一次。最后,我会将这些视图连接到父视图类的IBOutlets。
显然我做错了,因为我没有在自定义视图中看到我的标签。我怀疑我需要直接将nib与视图相关联,就像你对集合/表视图一样,但我还没有找到这样做的地方。
这样做的正确方法是什么?我想我可以通过编程方式添加视图,但是如何处理各种设备的布局(例如iphone 4 vs 5)?
答案 0 :(得分:7)
我在下面列出的内容似乎有用
1)为自定义视图创建xib和.h / .m文件 1a)假设您需要IBOutlets来查看您想要控制的元素,请在身份检查器中为文件所有者提供.h文件中定义的类名。
2)在.h文件中定义属性
@property (nonatomic, retain) IBOutlet UIView *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文件中定义自定义子视图实例的出口,并像往常一样在故事板中连接它们。
答案 1 :(得分:2)
您无法在xib中创建视图并在故事板中使用它。如果您已在xib文件中创建它,则可以将其复制并粘贴到故事板中。如果您希望它是控制器的根视图,请删除控制器获得的视图,并粘贴xib中的视图。然后,您可以将这些视图的类更改为自定义类。
我不确定“另一种观点的孩子”是什么意思 - 观点没有亲子关系,这是一种观点 - 子视图关系。此外,您通常(永远不会)将视图拖到容器视图中。容器视图包含一个视图控制器,当您将容器视图添加到另一个视图时,它会自动获得。该控制器是控制器的子控件,其视图中包含容器视图。如果您希望自定义视图显示在容器视图的位置,那么您可以将该视图添加到子控制器的视图中(或用您的视图替换该视图)。