如何从 XIB 文件访问 ViewController 中的 IBoutlet

Posted

技术标签:

【中文标题】如何从 XIB 文件访问 ViewController 中的 IBoutlet【英文标题】:How to access the IBoutlet in ViewController from the XIB file 【发布时间】:2018-05-30 07:08:37 【问题描述】:

我在 UiView.xib 文件中有我的 UIButton Outlet,我想创建一个操作/函数来更改来自另一个 UIView.xib 文件的 UILablel Outlet 的文本。

我已经在我的 ViewController 文件中添加了两个 UIView,但我不知道如何创建函数来访问不同 XIB 文件中的元素并在函数中调用它们。

这是我的 ViewController 文件的代码

    override func viewDidLoad() 
        super.viewDidLoad()

        // UIView 1 (XIB File 1)
        if let addUIView1 = Bundle.main.loadNibNamed("totalOz", owner: self, options: nil)?.first as? totalOZVC 

            self.view.addSubview(addUIView1)

       // Button 120ml function
            addUIView1.button120ml.addTarget(self, action: #selector(ViewController.buttonSelectGlassSize(sender:)), for: .touchUpInside)


    // UIView2 (XIB File 2)

        if let addUIView2 = Bundle.main.loadNibNamed("GlassSelector", owner: self, options: nil)?.first as? GlassSelectorVC 

            self.view.addSubview(addUIView2)

            addUIView2.labelGlassSelect.textColor = UIColor.white
            addUIView2.labelGlassSelect.text = "Select the size of Glass"
 

    // Creating a function to call the Outlets from the XIB files

    @objc func buttonSelectGlassSize(sender: UIButton) 
        // Change the text of labelGlassSelect when user press the button 120mL
    

对不起,我对 Swift 还是很陌生,请大家帮帮我。

非常感谢!

【问题讨论】:

【参考方案1】:

要将来自不同 xib 的函数调用回您的控制器,请使用自定义委托方法。下面是教程

Implementing delegates in Swift, step by step.

要从您的控制器更新其他类数据,请在其他类中创建内部函数并从您的控制器调用它们。

【讨论】:

【参考方案2】:

创建了addUIView1addUIView2 的全局实例。在buttonSelectGlassSize 方法中,访问addUIView2 并更新label 的文本。目前您没有全局实例,因此您无法更新标签的文本。

【讨论】:

以上是关于如何从 XIB 文件访问 ViewController 中的 IBoutlet的主要内容,如果未能解决你的问题,请参考以下文章

从 nsbundle 访问图像

Swift:无法从 xib 访问子视图

访问,从单个 nib 获取对多个视图的引用

如何从 xib 文件加载和显示窗口

如何在swift中按下按钮从另一个xib文件加载另一个xib文件

如何创建从集合单元 xib 文件到集合视图控制器的出口