簡體   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