簡體   English   中英

如何訪問 XIB 中的變量

[英]How to access variables inside the XIB

我創建了一個名為UserInfoView的可重用自定義視圖和一個 XIB 文件,我想將其嵌入故事板中。

  1. 我將根視圖的類以及自定義視圖的文件所有者設置為 XIB 文件中的UserInfoView
  2. 我在 XIB 文件和 Swift 文件中創建了標簽,並通過文件所有者鏈接它們。
final class UserInfoView: UIImageViewX {
    @IBOutlet weak var locationLabel: UILabel!
    @IBOutlet weak var nameLabel: UILabel!
    @IBOutlet weak var ageLabel: UILabel!
}

在此處輸入圖像描述

  1. 我在主故事板中創建了一個視圖並將類設置為UserInfoView
  2. 最后,我在主視圖控制器的 Swift 文件中創建了一個名為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM