**更新** 我正在研究Swift中的一个想法,似乎无法弄清楚如何将视图连接到视图类。
我在IB中有一个UIViewController和一个与IB中的UIViewController相关联的UIViewController类。在UIViewController和药物在UIView IB中。我想给UIView它自己的课。我在View中有一个Text Field,我希望UIView类能够处理该文本字段的所有设置代码。我能够创建UIView类,但我也能够将它设置为IB中View的bast类。我不是100%肯定的是如何初始化这个类,以便我可以在UIView类中创建变量并控制将它们拖到IB中的文本字段,
*更新* 这是我的代码到目前为止..它似乎至少在做什么,但我收到了胎儿错误打印消息
import UIKit
class AddPlayerView: UIView
@IBOutlet weak var inputPlayerOne: UITextField!
@IBOutlet weak var addPlayerOne: UIButton!
override init(frame: CGRect) {
super.init(frame: frame)
// Initialization code
println("init add player")
}
required init(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
这是我打印出来的
致命错误:init(编码器:)尚未实现:
答案 0 :(得分:1)
我只是没有得到你的问题。使用IB初始化视图将触发init(编码器aDecoder:NSCoder)而不是init(帧:CGRect),这是标准的。现在,如果你担心的是访问一些非初始化的变量,那么只需覆盖func awakeFromNib()。并使用super
实现所需的初始化程序required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
override awakeFromNib(){
// Initialization code
}
这有意义吗?
答案 1 :(得分:0)
您可以按照以下步骤创建一个Outlet(使用Xcode6-Beta6 + Swift测试):
完成。现在,在您的快速课程中,您可以参考您的UIButton。
class ViewController: UIViewController {
@IBOutlet weak var button: UIButton!
...
希望这有帮助。
答案 2 :(得分:0)
Storyboard使用它自己的初始化程序:init(coder:)
来初始化它的xib。这也意味着如果您覆盖一个初始化程序,则必须覆盖故事板的required
初始化程序(前面提到的coder
)。看起来好像是这样做的,但出于某种原因,您已将fatalError("init(coder:) has not been implemented") as your code
放入required init(coder aDecoder: NSCoder)
。
这意味着每次初始化视图时,都会调用该方法,当然它会引发致命错误并导致应用程序崩溃。我们必须更换该代码。请务必在方法开头调用super.init(coder: aDecoder)
,然后再放置其余的初始化代码。
您可能还会发现此Stack Overflow答案很有用:Fatal error: use of unimplemented initializer 'init(coder:)' for class
如果您有任何其他问题,请告诉我。祝你好运!