我试图将UIView
在XIB中创建的自定义添加到main.storyboard
子视图中的视图控制器中。我怎样才能做到这一点?
matchScrollView
(标签1)是UIScrollView
main.storyboard中的in view控制器,而matchView
(标签2)是UIView
我在另一个XIB文件中创建的自定义。
按下按钮,我想将自定义UIView
添加到UIScrollView
子视图中。但是我如何才能使其实际显示呢?我想我还没有分配和初始化它,以及指示位置等等,但是我该怎么做呢?我尝试了不同的方法但没有成功。我可以以UIViews
编程方式创建,但还没有找到一种UIView
从XIB加载方法的方法。
-(IBAction) buttonTapped:(id)sender {
UIScrollView *matchScrollView = (UIScrollView *) [self.view viewWithTag:1];
UIView *matchView = (UIView *) [self.view viewWithTag:2];
[matchScrollView addSubview:matchView];
}
之所以UIView
在另一个XIB文件中创建自定义而不是在main.storyboard视图控制器上直接实现它,是因为我想多次重复使用同一视图。因此UIScrollView
具有的许多子视图UIViews
。
我希望可以创建的多个实例MatchView
并将其全部添加matchScrollView
为子视图。
您遇到的问题是完全正常的。苹果公司设计的方式不允许将自定义视图与自己的xib复用到其他xib中。
假设您有一个名为HeaderView的自定义视图,以及一个名为HeaderView.xib的自定义xib。假设您希望能够在另一个名为GlobalView.xib的xib中拖动一个子视图,并将其类指定为HeaderView类型,希望它可以从HeaderView.xib加载该视图并将其插入到位。您可以这样做:
A)确保将HeaderView.xib中的文件所有者设置为HeaderView类。
B)转到您的GlobalView.xib,拖动子视图并使它成为HeaderView类。
C)在HeaverView.m中实现initWithCoder,如果加载视图后没有子视图意味着它是从GlobalView加载的,则从正确的笔尖手动加载它,连接IBOutlets并设置框架和自动调整大小的蒙版(如果要使用GlobalView的框架(通常是您想要的)。
- (id)initWithCoder:(NSCoder *)aDecoder {
self = [super initWithCoder:aDecoder];
if (self.subviews.count == 0) { //means view got loaded from GlobalView.xib or other external nib, cause there aren't any subviews
HeaverView *viewFromNib = [[NSBundle mainBundle] loadNibNamed:@"HeaverView" owner:self options:nil].firstObject;
//Now connect IBOutlets
self.myLabel1 = viewFromNib.myLabel1;
self.myLabel2 = viewFromNib.myLabel2;
self.myLabel3 = viewFromNib.myLabel3;
[viewFromNib setFrame:self.bounds];
[viewFromNib setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight];
[self addSubview:viewFromNib];
}
return self;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句