【发布时间】:2017-01-12 08:42:25
【问题描述】:
我已经制作了一个自定义 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
【问题讨论】:
-
你的问题有很多困惑。 1)我已经制作了一个我以前在我的故事板中使用过的自定义 xib - 你是如何制作自定义 xib 的,我的意思是它是一个带有 .xib 扩展名的单独文件,如果是的话,你是如何在故事板中使用的。我的意思是没有代码我可以看到在某处使用 xib 的内容。 2)您没有使用自动布局约束 3)您没有在代码表单 xib 中初始化任何内容。我会说要么编辑帖子并发布您用于此特定实现的完整代码,要么发布一些您的目标的图形,我可以建议最佳方式。
-
@MaheshAgrawala 我刚刚对帖子进行了编辑希望对您有所帮助
-
像这样改变 loadnib 行。
self.view = NSBundle.mainBundle().loadNibNamed("CardView", owner: nil, options: nil)[0] as! UIView并尝试一次 -
我建议你在这个类之外初始化它,然后把这个类的实例添加到那里的superview中。
-
@MaheshAgrawala 我更改了笔尖负载线,但它崩溃了
标签: ios swift xib addsubview