簡體   English   中英

Swift-以編程方式將自定義Xib視圖添加為子視圖

[英]Swift - Add Custom Xib View As Subview Programmatically

我已經創建了一個自定義的Xib,我以前在我的情節提要中使用過,我只想簡單地創建一個自定義視圖調整大小的實例,然后將其作為子視圖添加到uiscrollview。 我試圖在我的視圖控制器的viewdidload函數中使用此代碼塊

let cardView = CardView(coder: NSCoder())
cardView!.frame.size.width = 100
cardView!.frame.size.height = 100
scrollView.addSubview(cardView!)

但我收到這個錯誤

Terminating app due to uncaught exception 'NSInvalidArgumentException',
reason: '*** -containsValueForKey: cannot be sent to an abstract object
of class NSCoder: Create a concrete instance!'

編輯:這是連接到CardView.xib的swift文件的代碼

import UIKit

class CardView: UIView {
@IBOutlet var view: UIView!
@IBOutlet weak var cornerView: UIView!

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)

    NSBundle.mainBundle().loadNibNamed("CardView", owner: self, options: nil)
    self.addSubview(view)
    view.frame = self.bounds

    cornerView.layer.cornerRadius = 3
    cornerView.layer.masksToBounds = true

    view.layer.shadowOffset = CGSizeMake(1, 5);
    view.layer.shadowRadius = 2;
    view.layer.shadowOpacity = 0.2;
    view.layer.masksToBounds = false
}

}

我沒有使用自動布局,而是嘗試簡單地設置高度和寬度來測試從這兩行手動添加子視圖(也請注意,我是iOS開發的新手)

cardView!.frame.size.width = 100
cardView!.frame.size.height = 100

下面是在使用自定義XIB進行視圖初始化的情況下使用的方法。

在像您的CardView這樣的視圖類中,代碼類似。

class CardView: UIView {
    @IBOutlet weak var cornerView: UIView!

    func setupWithSuperView(superView: UIView) {
        self.frame.size.width = 100
        self.frame.size.height = 100
        superView.addSubview(self)

        cornerView = UIView(frame: self.bounds)
        cornerView.layer.cornerRadius = 3
        cornerView.layer.masksToBounds = true

        view.layer.shadowOffset = CGSizeMake(1, 5);
        view.layer.shadowRadius = 2;
        view.layer.shadowOpacity = 0.2;
        view.layer.masksToBounds = false
    }
}

以及在您要調用此類進行初始化的位置使用此功能。

let cardView = NSBundle.mainBundle("CardView").loadNibNamed("", owner: nil, options: nil)[0] as! CardView
cardView.setupWithSuperView(scrollView)

嘗試一次。 但是,請確保xib文件的第一個視圖的類型為CardView。 我的意思是第一個視圖的類是CardView。

暫無
暫無

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

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