我有一個或多或少的特殊情況的問題。我必須複製從nib加載的UIView。這是源變量的initaliziation:Swift 3 - IBOutlet無副本UIView
let view = Bundle.loadView(fromNib: "MyView", withType: MyView.self)
的觀點有兩個標籤,像這樣網點性質:
class MyView: UIView {
@IBOutlet weak var label: UILabel!
@IBOutlet weak var subLabel: UILabel!
}
在我來說,我必須複製這一觀點。所以,我發現這個解決方案應該很好地工作:
import UIKit
extension UIView
{
func copyView<T: UIView>() -> T {
return NSKeyedUnarchiver.unarchiveObject(with: NSKeyedArchiver.archivedData(withRootObject: self)) as! T
}
}
不幸的是,當我把這個行:
let copyView = view.copyView()
的label
和subLabel
屬性是零。在view
他們被設置。 MyView.xib
中的FilesOwner設置爲MyView
類
複製函數可以在我的情況下工作嗎?有人建議如何在這裏繼續?
你真的需要複製整個視圖嗎?也許不復制整個視圖會更有意義,但只是將一些屬性傳遞給此視圖的新實例 –
是的,當然這是解決方案。不幸的是我需要通過這種方式進行復制。原因我有一個只有UIView作爲參數的函數。所以它在不知道UIView的子類的情況下創建一個副本。 –
我也沒有看到'NSKeyedUnarchiver'的副本視圖...只是創建一個具有相同屬性值的新副本 – Tj3n