webentwicklung-frage-antwort-db.com.de

So erstellen Sie eine benutzerdefinierte Ansicht programmgesteuert in Swift mit Steuerelementen, Textfeldern, Schaltflächen usw.

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)
    }
37
LC 웃

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.

45
Stefan Arentz

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)
23
David Seek
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)
       }
6
Sateesh Pasala
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.

2
Pavel Gatilov
let viewDemo = UIView()
viewDemo.frame = CGRect(x: 50, y: 50, width: 50, height: 50)
self.view.addSubview(viewDemo)
0
Pankaj Jangid