Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to create custom view programmatically in swift having controls text field, button etc

I am trying to access the MyCustomView from another class using the following code in ViewController.swift ..

var view = MyCustomView(frame: CGRectZero) 

.. in the viewDidLoad method. The problem is the view does not get initialized in the simulator.

I have already set class in storyboard for the current ViewController.

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)     } 
like image 719
Anish Parajuli 웃 Avatar asked Mar 13 '15 10:03

Anish Parajuli 웃


2 Answers

The CGRectZero constant is equal to a rectangle at position (0,0) with zero width and height. This is fine to use, and actually preferred, if you use AutoLayout, since AutoLayout will then properly place the view.

But, I expect you do not use AutoLayout. So the most simple solution is to specify the size of the custom view by providing a frame explicitly:

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

Note that you also need to use addSubview otherwise your view is not added to the view hierarchy.

like image 171
Stefan Arentz Avatar answered Sep 23 '22 14:09

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) 
like image 25
David Seek Avatar answered Sep 22 '22 14:09

David Seek