我创建了一个自定义按钮类,如下所示。
import UIKit
class LogButtonView: UIButton {
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.frame = CGRectMake(200, 200, 100, 100)
self.layer.cornerRadius = 50
self.layer.borderWidth = 1
self.layer.borderColor = self.tintColor.CGColor
}
}
而且我知道如何在故事板上使用它。
但是,如何动态创建它的实例ViewController.swift
并将其添加到containerView
?
import UIKit
class ViewController: UIViewController {
@IBOutlet var containerView: UIView!
override func viewDidLoad() {
super.viewDidLoad()
let logBtn = LogButtonView() // Missing argument for parameter 'coder' in call
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
并且,如果可能的话,我希望所有LogButtonView
实例的大小都相同,因此我将set设置为self.frame = CGRectMake(200, 200, 100, 100)
。但是故事板上的实例似乎和我拖动的大小一样。
要在代码中创建视图init(coder:)
,请init(frame:)
不要使用,而要使用。并且不要忘记在创建后将其添加到视图层次结构中
class LogButtonView: UIButton {
init() {
super.init(frame: CGRectMake(200, 200, 100, 100))
//other stuff
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
//viewDidLoad:
override func viewDidLoad() {
super.viewDidLoad()
let logBtn = LogButtonView()
self.view.addSubview(logBtn)
}
但我认为您不想在视图的init中设置框架,因为这意味着每个LogButtonView都将位于同一位置。更好的方法是:
class LogButtonView: UIButton {
override init(frame: CGRect) {
super.init(frame: frame)
//other stuff
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
//viewDidLoad:
override func viewDidLoad() {
super.viewDidLoad()
let logBtn = LogButtonView(frame: CGRectMake(200, 200, 100, 100))
self.view.addSubview(logBtn)
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句