xib ファイルでビューを作成し、そのアウトレットをクラスに接続する方法があるかどうか疑問に思っていたので、そのクラスの複数のインスタンスを作成してウィンドウに配置できます。いくつか問題があるので、コードの修正を手伝ってもらえますか?
これが私がしたことです:
まず、CustomView.xib と CustomView.swift の 2 つのファイルを作成しました。次に、NSImageView をカスタム ビューに追加するインターフェイスを設計しました。ファイルの所有者をクラス名に設定し、NSImageView からのアウトレットをクラスに追加しました。
次に、nib からインターフェイスをロードする次の関数を作成しました。
func loadView() -> NSView {
var top = NSArray()
Bundle.main.loadNibNamed("CustomView", owner: self, topLevelObjects: &top)
let view = top[0] as! NSView
return view
}
そして、インターフェイスをロードするようにクラスをセットアップします。
override init(frame: CGRect) {
super.init(frame: frame)
let view = loadView()
view.frame = bounds
addSubview(view)
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
そこで、そのクラスの 2 つの変数を作成し、ウィンドウに配置しました。
var x = CustomView(frame: CGRect(x: 0, y: 0, width: 600, height: 105))
var y = CustomView(frame: CGRect(x: 0, y: 105, width: 600, height: 105))
そして、何らかの理由で、このコードで奇妙なエラーが発生します。1 つの変数で初めて機能しましたが、複数配置すると、NSView で NSWindow タイプをキャストできなかったと表示されます。
タイプ 'NSApplication' (0x7fffb5cf3ef0) の値を 'NSView' (0x7fffb5d04bb0) にキャストできませんでした。
最初の最上位オブジェクトがビューである場合もあれば、ウィンドウである場合もあるために、このエラーが発生すると思います。だから私は混乱しています。
明らかに、この行でエラーがスローされます。
let view = top[0] as! NSView
では、ここで何が問題なのですか?
(ココアタッチコードで回答しないでください)