web-dev-qa-db-fra.com

Comment créer une vue personnalisée par programme dans Swift avec des champs de texte, des boutons, etc.

J'essaie d'accéder à la MyCustomView à partir d'une autre classe à l'aide du code suivant dans ViewController.Swift ..

var view = MyCustomView(frame: CGRectZero)

.. dans la méthode viewDidLoad. Le problème est que la vue n'est pas initialisée dans le simulateur.

J'ai déjà défini la classe dans le storyboard pour le ViewController actuel.

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 웃

La constante CGRectZero est égale à un rectangle à la position (0,0) avec une largeur et une hauteur égales à zéro. Ceci est correct à utiliser, et même préférable si vous utilisez AutoLayout, car AutoLayout placera alors la vue correctement.

Mais je suppose que vous n'utilisez pas AutoLayout. La solution la plus simple consiste donc à spécifier la taille de la vue personnalisée en fournissant explicitement un cadre:

customView = MyCustomView(frame: CGRect(x: 0, y: 0, width: 200, height: 50))
self.view.addSubview(customView)

Notez que vous devez également utiliser addSubview sinon votre vue n'est pas ajoutée à la hiérarchie des vues.

45
Stefan Arentz

Swift 3/Swift 4 Mise à jour:

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)

Dans cette ligne, vous essayez de définir un rectangle vide pour votre vue personnalisée. C'est pourquoi vous ne pouvez pas voir votre vue dans le simulateur.

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