实例化 Nib 并访问它的子视图

Posted

技术标签:

【中文标题】实例化 Nib 并访问它的子视图【英文标题】:Instantiate Nib and access its SubViews 【发布时间】:2018-06-28 18:33:04 【问题描述】:

我有一个模型类:

import UIKit

class MyModel: NSObject

   var str1 : String = "Test String 1"
   var str2 : String = "Test String 2"
   var str3 : String = "Test String 3"

我有一个带有 3 个标签的 nib 文件和一个带有插座和函数的 swift 类来返回它的 nib:

import UIKit

class MyNibClass: UIView

    @IBOutlet weak var label1: UILabel!
    @IBOutlet weak var label2: UILabel!
    @IBOutlet weak var label3: UILabel!

    func instanceMyNib() -> UIView
    
        let view =  UINib(nibName: "myNib", bundle: nil).instantiate(withOwner: nil, options: nil)[0] as! UIView
        return view
    

在我的 viewController 中,我使用此代码来初始化我的笔尖并将其添加到 viewController 视图

import UIKit

class myViewController: UIViewController

    override func viewDidLoad()
    
        super.viewDidLoad()
        let model : MyModel = MyModel()
        let nibClass : MyNibClass = MyNibClass()
        let viewFromNib = nibClass.instanceMyNib()
        view.addSubview(viewFromNib)
    

我无法解决的问题是如何更改实例化的笔尖标签? 我在 *** 上阅读了很多答案,但找不到明确的答案。

连接 nib-itsClass-customModel 的最佳方式是什么?

【问题讨论】:

【参考方案1】:

改变这一行

let view =  UINib(nibName: "myNib", bundle: nil).instantiate(withOwner: nil, options: nil)[0] as! UIView

let view =  UINib(nibName: "myNib", bundle: nil).instantiate(withOwner: nil, options: nil)[0] as! MyNibClass

那么在你添加自定义视图之前你可以

let viewFromNib = nibClass.instanceMyNib()
viewFromNib.label1.text = "anyThing"
view.addSubview(viewFromNib)

【讨论】:

谢谢,您的回答正是我所需要的!

以上是关于实例化 Nib 并访问它的子视图的主要内容,如果未能解决你的问题,请参考以下文章

UINib (iOS):可以从一个 nib 文件中实例化多个视图吗?

Swift - 从 Nib 实例化总是返回 UIViewController 类型而不是动态类型

从 nib 实例化 UIView 导致无限循环问题

如何从 ViewController 中的 xib (nib) 实例化 UIView / UITableView

从nib实例化UIView会导致无限循环问题

如何在不使用 Nib 的情况下实例化和调用 UIView 子类