多かれ少なかれ特別なケースについて質問があります。私はnibからロードされているUIViewをコピーする必要があります。これは、ソース変数のinitaliziationです:Swift 3 - コピー後のIBOutletなしUIView
let view = Bundle.loadView(fromNib: "MyView", withType: MyView.self)
ビューはそうのようなコンセントのプロパティとして2つのラベルがあります。私の場合は
class MyView: UIView {
@IBOutlet weak var label: UILabel!
@IBOutlet weak var subLabel: UILabel!
}
を私は、このビューをコピーする必要があります。
let copyView = view.copyView()
label
とsubLabel
プロパティがnilです:
import UIKit
extension UIView
{
func copyView<T: UIView>() -> T {
return NSKeyedUnarchiver.unarchiveObject(with: NSKeyedArchiver.archivedData(withRootObject: self)) as! T
}
}
は、残念ながら、私はこの行を呼び出します。だから私は、正常に動作する必要があり、この解決策を見つけました。
view
に設定されています。
MyView.xib
のFilesOwnerは
MyView
クラスに設定されています
私の場合、コピー機能は動作しますか?誰かがここに進む方法をアドバイスしていますか?
本当に全体のビューをコピーする必要がありますか?おそらく、全体のビューをコピーしないで、このビューの新しいインスタンスに渡す属性だけをコピーする方が意味があります。 –
もちろん、これは解決策です。残念ながら私はこの方法でコピーを作成する必要があります。私はパラメータとしてUIViewだけ持っている関数があります。したがって、UIViewのサブクラスを知らなくてもコピーを作成します。 –
私は 'NSKeyedUnarchiver'によるコピービューのポイントを見ません...同じプロパティ値を持つ新しいものを作成してください。 – Tj3n