web-dev-qa-db-ja.com

コントロールテキストフィールド、ボタンなどを持つSwiftでプログラムでカスタムビューを作成する方法

ViewController.Swiftの次のコードを使用して、別のクラスからMyCustomViewにアクセスしようとしています。

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

CGRectZero定数は、(0,0)の位置にある幅と高さが0の長方形と同じです。 AutoLayoutがビューを適切に配置するため、AutoLayoutを使用する場合、これは使用しても問題ありませんが、実際には優先されます。

ただし、AutoLayoutを使用しないことを期待しています。そのため、最も簡単な解決策は、フレームを明示的に指定してカスタムビューのサイズを指定することです。

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

addSubviewも使用する必要があることに注意してください。そうでない場合、ビューはビュー階層に追加されません。

49
Stefan Arentz

Swift 3/Swift 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)
27
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)
       }
7
Sateesh Pasala
view = MyCustomView(frame: CGRectZero)

この行では、カスタムビューの空の四角形を設定しようとしています。そのため、シミュレーターでビューを表示できません。

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