[英]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.