[英]How to access variables inside the XIB
我創建了一個名為UserInfoView
的可重用自定義視圖和一個 XIB 文件,我想將其嵌入故事板中。
UserInfoView
。final class UserInfoView: UIImageViewX {
@IBOutlet weak var locationLabel: UILabel!
@IBOutlet weak var nameLabel: UILabel!
@IBOutlet weak var ageLabel: UILabel!
}
UserInfoView
。userInfoView
的變量,並將其與 #3 中的視圖鏈接。final class MainViewController: UIViewController {
@IBOutlet weak var userInfoView: UserInfoView!
}
當我運行模擬器時,它運行時沒有任何錯誤。 但是,有兩個問題。
首先,當我嘗試訪問UserInfoView
中的變量時,如locationLabel
,它會導致 nil 錯誤。
userInfoView.locationLabel.text = "location" // error
其次,除了我在故事板中設置UserInfoView
的方式之外,我還使用工廠方法在視圖控制器中生成相同的對象。 但是,我收到自定義視圖中的標簽未鏈接的鍵/值編碼錯誤。
Bundle.main.loadNibNamed("UserInfoView", owner: self, options: nil)?[0] as? UserInfoView
此類與鍵 ageLabel 的鍵值編碼不兼容
當我查看情節提要中的UserInfoView
時,我在自定義視圖中看到了未鏈接的標簽出口,但是當我嘗試鏈接它們時,這些似乎沒有連接情節提要中的任何元素。
不幸的是,將UserInfoView
類型的視圖添加到情節提要場景不會神奇地從 NIB 文件中實例化該對象。
您需要將控件直接移動到情節提要場景中並將它們鏈接到那里,或者您需要從 NIB 文件實例化視圖並將其添加到代碼中的視圖控制器視圖中;
這是您嘗試使用loadNibNamed
的第二種方法。 您的錯誤是提供self
作為owner
參數。 此參數是分配為“文件所有者”的對象,因此您需要提供UserInfoView
的實例:
let fileOwner = UserInfoView(frame:CGRect.zero)
if let view = Bundle.main.loadNibNamed("UserInfoView", owner: fileOwner, options: nil)?[0] as UserInfoView {
...
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.