Как программно создать пользовательский вид в Swift, используя текстовое поле, кнопку и т. Д.
Я пытаюсь получить доступ к MyCustomView
из другого класса, используя следующий код в ViewController.swift..
var view = MyCustomView(frame: CGRectZero)
.. в viewDidLoad
метод. Проблема в том, что представление не инициализируется в симуляторе.
Я уже установил класс в раскадровке для текущего 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)
}
5 ответов
CGRectZero
константа равна прямоугольнику в позиции (0,0)
с нулевой шириной и высотой. Это хорошо для использования, и на самом деле предпочтительнее, если вы используете AutoLayout, так как AutoLayout тогда правильно разместит представление.
Но я ожидаю, что вы не используете AutoLayout. Поэтому самое простое решение - указать размер пользовательского представления, явно указав фрейм:
customView = MyCustomView(frame: CGRect(x: 0, y: 0, width: 200, height: 50))
self.view.addSubview(customView)
Обратите внимание, что вам также нужно использовать addSubview
в противном случае ваше представление не будет добавлено в иерархию представлений.
Свифт 3 / Свифт 4 Обновление:
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)
}
let viewDemo = UIView()
viewDemo.frame = CGRect(x: 50, y: 50, width: 50, height: 50)
self.view.addSubview(viewDemo)
view = MyCustomView(frame: CGRectZero)
В этой строке вы пытаетесь установить пустой прямоугольник для своего пользовательского представления. Вот почему вы не можете увидеть свой взгляд в симуляторе.