簡體   English   中英

無法以編程方式將視圖添加到情節提要中的現有子視圖

[英]Can't add a view to an existing subview in storyboard programatically

我正在嘗試在代碼中模擬此視圖層次結構:

 "scene"
    "view Shop Main"                       -> `UIView`
        "view shop scroll"                 -> `UIScrollView`
            "ViewDetail"                   -> `UIView`
                "Shop Connected Container" -> `UIView`
                    "Connected Shop"       -> `UIView`

我想實例化多個“ Connected Shop”並將其添加到“ Shop Connected Container”,如下所示:

"scene"
    "view Shop Main"                       -> `UIView`
        "view shop scroll"                 -> `UIScrollView`
            "ViewDetail"                   -> `UIView`
                "Shop Connected Container" -> `UIView`
                    "Connected Shop"       -> `UIView`
                    "Connected Shop"       -> `UIView`
                    "Connected Shop"       -> `UIView`

如何以編程方式執行此操作? 我為每個subView和一個xib文件都有一個自定義類。 這就是我從代碼中實例化子視圖的方式:

  override func viewDidLoad() {

  /*1*/         let vShopMain = NSBundle.mainBundle().loadNibNamed("viewShopMain", owner: self, options: nil).first as! viewShopMain
    /*2*/       let vShopScroll = NSBundle.mainBundle().loadNibNamed("viewShopScroll", owner: vShopMain, options: nil).first as! viewShopScroll

    /*3*/       let vDetail : UIView = NSBundle.mainBundle().loadNibNamed("viewDetail", owner: vShopScroll, options: nil).first as! viewDetail
//
//
    /*4*/       let sConContainer : UIView = NSBundle.mainBundle().loadNibNamed("shopConnectedContainer", owner: vDetail, options: nil).first as! shopConnectedContainer
   /*5*/        let cShop = NSBundle.mainBundle().loadNibNamed("connectedShop", owner: sConContainer, options: nil).first as! connectedShop


        cShop.bannerTitle.text = "Shop Title"

        vShopMain.addSubview(vShopScroll)
        vShopScroll.addSubview(vDetail)
        vDetail.addSubview(sConContainer)
        sConContainer.addSubview(cShop)


        self.view.addSubview(sConContainer)

還嘗試了完全相同的結果:

        let vShopMain = UINib(nibName: "viewShopMain", bundle: nil).instantiateWithOwner(nil, options: nil)[0] as! viewShopMain

       let scroll = UINib(nibName: "viewShopScroll", bundle: nil).instantiateWithOwner(nil, options: nil)[0] as! viewShopScroll

        let vDetail = UINib(nibName: "viewDetail", bundle: nil).instantiateWithOwner(nil, options: nil)[0] as! viewDetail

        let sConContainer = UINib(nibName: "shopConnectedContainer", bundle: nil).instantiateWithOwner(nil, options: nil)[0] as! shopConnectedContainer

        let cShop = UINib(nibName: "connectedShop", bundle: nil).instantiateWithOwner(nil, options: nil)[0] as! connectedShop

        cShop.bannerTitle.text = "hola"

        vShopMain.addSubview(scroll)
        scroll.addSubview(vDetail)
        vDetail.addSubview(sConContainer)
        sConContainer.addSubview(cShop)


        self.view.addSubview(sConContainer)

但是添加的“新”視圖位於另一個視圖的下面,這不是預期的行為,因為我是從情節提要中實例化現有視圖,而不是創建新視圖。

我遵循情節提要層次結構的順序。 這些視圖也與它們的自定義類鏈接在一起,並且具有其xib文件。 但是當我運行我的應用程序時,我遇到了這個奇怪的問題

我在這里做錯了什么? 請幫忙

幫助您找出其崩潰原因。 loadNibNamed返回對象數組,而不是單個視圖。 所以這肯定會崩潰

let vShopScroll = NSBundle.mainBundle().loadNibNamed("viewShopScroll", owner: self, options: nil) as! viewShopScroll  

因為您假設它返回viewShopScroll並強制展開。 正如您所說的那樣,自從您取走第first物體以來,第一行一直在工作

let vShopMain = NSBundle.mainBundle().loadNibNamed("viewShopMain", owner: self, options: nil).first as! viewShopMain

其他所有情況也一樣

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM