Ich versuche, auf die MyCustomView
von einer anderen Klasse mit dem folgenden Code in ViewController.Swift zuzugreifen.
var view = MyCustomView(frame: CGRectZero)
.. in der viewDidLoad
-Methode. Das Problem ist, dass die Ansicht nicht im Simulator initialisiert wird.
Ich habe bereits eine Klasse im Storyboard für den aktuellen ViewController festgelegt.
class MyCustomView: UIView {
var label: UILabel = UILabel()
var myNames = ["dipen","laxu","anis","aakash","santosh","raaa","ggdds","house"]
override init(){
super.init()
}
override init(frame: CGRect) {
super.init(frame: frame)
self.addCustomView()
}
required init(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func addCustomView() {
label.frame = CGRectMake(50, 10, 200, 100)
label.backgroundColor=UIColor.whiteColor()
label.textAlignment = NSTextAlignment.Center
label.text = "test label"
label.hidden=true
self.addSubview(label)
var btn: UIButton = UIButton()
btn.frame=CGRectMake(50, 120, 200, 100)
btn.backgroundColor=UIColor.redColor()
btn.setTitle("button", forState: UIControlState.Normal)
btn.addTarget(self, action: "changeLabel", forControlEvents: UIControlEvents.TouchUpInside)
self.addSubview(btn)
var txtField : UITextField = UITextField()
txtField.frame = CGRectMake(50, 250, 100,50)
txtField.backgroundColor = UIColor.grayColor()
self.addSubview(txtField)
}
Die Konstante CGRectZero
entspricht einem Rechteck an Position (0,0)
mit der Breite und Höhe von Null. Wenn Sie AutoLayout verwenden, ist dies in Ordnung und wird sogar bevorzugt, da AutoLayout die Ansicht dann ordnungsgemäß platziert.
Ich erwarte jedoch, dass Sie AutoLayout nicht verwenden. Die einfachste Lösung besteht darin, die Größe der benutzerdefinierten Ansicht durch explizite Bereitstellung eines Frames anzugeben:
customView = MyCustomView(frame: CGRect(x: 0, y: 0, width: 200, height: 50))
self.view.addSubview(customView)
Beachten Sie, dass Sie auch addSubview
verwenden müssen. Andernfalls wird Ihre Ansicht nicht zur Ansichtshierarchie hinzugefügt.
Swift 3/Swift 4 Update:
let screenSize: CGRect = UIScreen.main.bounds
let myView = UIView(frame: CGRect(x: 0, y: 0, width: screenSize.width - 10, height: 10))
self.view.addSubview(myView)
var customView = UIView()
@IBAction func drawView(_ sender: AnyObject) {
customView.frame = CGRect.init(x: 0, y: 0, width: 100, height: 200)
customView.backgroundColor = UIColor.black //give color to the view
customView.center = self.view.center
self.view.addSubview(customView)
}
view = MyCustomView(frame: CGRectZero)
In dieser Zeile versuchen Sie, ein leeres Rechteck für Ihre benutzerdefinierte Ansicht festzulegen. Deshalb können Sie Ihre Ansicht nicht im Simulator sehen.
let viewDemo = UIView()
viewDemo.frame = CGRect(x: 50, y: 50, width: 50, height: 50)
self.view.addSubview(viewDemo)