レイアウト用に.xibファイルを使用してカスタムビューを作成しました。私はプログラム的に作成し、別のビューにサブビューとしてこのビューを追加したいと思います。プログラムで別のビューにカスタムビューを追加する
サブビュークラス:
class Subview: UIView {
@IBOutlet var view: UIView!
@IBOutlet var titleLabel: UILabel!
@IBOutlet var textLabel: UILabel!
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
Bundle.main.loadNibNamed("Subview", owner: self, options: nil)
self.addSubview(view)
view.frame = self.bounds
}
}
私はそれについて移動するかどうかはわかりません、唯一のコンストラクタは、現在私が持っていないNSCoderのインスタンスを期待しています。
私はそれに追加の初期化子与えることを試みた。その後、
init(title: String, text: String) {
titleLabel.text = title
textLabel.text = text
super.init(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
}
そして、それを呼び出す:
let v = Subview(title: dataSource[i].whatever, text: dataSource[i].bla)
をしかし、ラベルアウトレットをアンラップしようとすると、それが失敗した、と理にかなっています.xibは初期化されていません。
私はすでに、ページのUIをプログラマチックに構築するのではなく、テーブルビューとカスタムセルを使用しようとしましたが、これは詳細ページであり、データソースとしてrowForIndexPathテーブルビューデリゲートが予期する配列。オブジェクトの配列にプロパティを変換するマッパーメソッドを書くことができますが、できるだけ避けることをお勧めします。
ありがとうございました。
nibの初期化が割り当てられていないので、コンセントが初期化されていないので、 'self = Bundle.main.loadNibNamed(" Subview "、owner:self、options:nil)?[0 ] ' – iphonic
look ..http://stackoverflow.com/a/33946855/4003548。 – vaibhav
https://stackoverflow.com/questions/35659714/loading-a-xib-file-to-a-uiview-swift/35666644#35666644これは役に立ちます。 –