TextFieldのレイアウトファイルの作成

Xibとは

Storyboard 画面間の関係と、画面の中身を表示するもの
Xib 画面に表示するパーツを表示するもの

初期化

override init(frame: CGRect) {
    super.init(frame: frame) self.setFromXib() autoresizingMask = .flexibleHeight
}

intrinsicContentSize

Viewの初期サイズを指定する

override var intrinsicContentSize: CGSize {
    return .zero
}

インスタンス化

let nib = UINib.init(nibName: "InputView", bundle: nil)
let view = nib.instantiate(withOwner: self, options: nil).first as! UIView

完成したコード

class InputView: UIView {

    @IBOutlet weak var chatTextField: UITextField!
    @IBOutlet weak var sendButton: UIButton!
    
    var delegate:InputViewDelegate!

    override init(frame: CGRect) {
        super.init(frame: frame)
        self.setFromXib()
        autoresizingMask = .flexibleHeight
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("error")
    }
    
    override var intrinsicContentSize: CGSize {
        return .zero
    }
    
    @IBAction func onSend(_ sender: Any) {
        delegate.sendTapped(text: chatTextField.text!)
        chatTextField.text = ""
    }
    
    func setFromXib() {
        let nib = UINib.init(nibName: "InputView", bundle: nil)
        let view = nib.instantiate(withOwner: self, options: nil).first as! UIView
        view.frame = self.bounds
        view.autoresizingMask = [.flexibleHeight, .flexibleWidth]
        self.addSubview(view)
    }
    
}

protocol InputViewDelegate: class {
    func sendTapped(text: String)
}

コメント

タイトルとURLをコピーしました