繁体   English   中英

如何将XIV文件中的UIView作为子视图添加到另一个Xib文件中

[英]How to add an UIView from a XIB file as a subview to another Xib file

我试图将我在XIB中创建的自定义UIView添加到我的main.storyboard中的视图控制器作为子视图。 我怎样才能做到这一点?

matchScrollView (标记1)是main.storyboard中视图控制器中的UIScrollView ,而matchView (标记2)是我在另一个XIB文件中创建的自定义UIView

按下按钮,我想将自定义UIView添加到UIScrollView作为子视图。 但是我怎么能让它显示出来呢? 我想我还没有分配和初始化它,同时指示位置等,但我怎么能这样做? 我尝试了不同的方法但没有成功 我可以以编程方式创建UIViews ,但尚未找到从XIB加载UIView的方法。

-(IBAction) buttonTapped:(id)sender {

    UIScrollView *matchScrollView = (UIScrollView *) [self.view viewWithTag:1];
    UIView *matchView = (UIView *) [self.view viewWithTag:2];
    [matchScrollView addSubview:matchView];

}

我在另一个XIB文件中创建自定义UIView而不是直接在我的main.storyboard视图控制器上实现它的原因是因为我想多次重复使用相同的视图。 所以UIScrollView具有的许多子视图UIViews

我希望我可以创建大量的MatchView实例,并将它们全部添加到matchScrollView作为子视图。

你遇到的问题是完全正常的。 Apple设计它的方式不允许将自己的xib重用自定义视图到其他xib中。

假设您有一个名为HeaderView的自定义视图,其中包含一个名为HeaderView.xib的自定义xib。 并且假设您希望能够在另一个名为GlobalView.xib的xib中拖动子视图并将其类指定为HeaderView类型,期望它从HeaderView.xib加载该视图并将其插入到位。 你可以这样做:

A)确保HeaderView.xib中的File's Owner设置为HeaderView类。

B)转到GlobalView.xib,拖动子视图并使其成为HeaderView类。

C)在HeaverView.m中实现initWithCoder,如果在加载视图后没有子视图意味着它从GlobalView加载,然后从正确的nib手动加载它,连接IBOutlets并设置框架和autoresizingmasks如果你想使用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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM