最简单的解决方案是创建MyView
一个子视图,它是其余子视图的容器。MyVC.xib
这为您提供了 in和 what's in之间的单点联系MyView.xib
,并允许您连接两个 xib 中的插座。
在MyVC.xib
中,将每个占位符视图的类设置为MyView
。
在MyView.xib
中,将顶级视图的类设置为UIView
。将 File's Owner 的类设置为MyView
. 如果您有任何MyView
已连接到的插座,MyView.xib
则需要将它们重新连接到 File's Owner,因为顶级视图不再具有这些插座。
在-[MyView initWithCoder:]
中,加载MyView.xib
并添加其顶级视图作为您的子视图。未经测试的例子:
+ (UINib *)nib {
static dispatch_once_t once;
static UINib *nib;
dispatch_once(&once, ^{
nib = [UINib nibWithNibName:NSStringFromClass(self) bundle:[NSBundle bundleForClass:self]];
});
return nib;
}
- (id)initWithCoder:(NSCoder *)aDecoder {
if (self = [super initWithCoder:aDecoder]) {
NSArray *contents = [[self.class nib] instantiateWithOwner:self options:nil][0];
UIView *containerView = contents[0];
// Make sure the container view's size tracks my size.
containerView.frame = self.bounds;
containerView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
self.autoresizesSubviews = YES;
if ([self respondsToSelector:@selector(setTranslatesAutoresizingMaskIntoConstraints:)]) {
self.translatesAutoresizingMaskIntoConstraints = YES;
containerView.translatesAutoresizingMaskIntoConstraints = YES;
}
// If you're using autolayout in both xibs, you should probably create
// constraints between self and containerView here.
[self addSubview:containerView];
}
return self;
}
这样做的效果是,您可以将MyView
's outlets 连接到 things inMyVC.xib
和 things in MyView.xib
,并且您可以将其他对象的 outletsMyVC.xib
连接MyView.xib
到MyView
. 但是,您不能将其他对象的出口连接MyVC.xib
到其他对象,MyView.xib
反之亦然。