单击其他 class (Uiviewcontroller) 中的按钮更改 ContainerView 中的标签文本

Change Label text in a ContainerView on click of a button from other class (Uiviewcontroller)

我在主应用程序屏幕上 containerViewUILabel 变小了。我在主 UIViewController 上得到了 UIButton。我想通过单击 UIViewController 中的按钮更改属于 containerView class 的 label 的文本。 我尝试通过委托来实现,但由于某种原因我犯了一个错误(展开可选)...

我尝试使用 Protocol,ContView 中的 bud 方法 "addText" 不起作用((((((

    class ViewController: UIViewController {

var delegate: DelegateProtocol?

override func viewDidLoad() {
    super.viewDidLoad()

}


@IBAction func button(_ sender: Any) {

delegate?.addText(String2: "123")

}}

////////////////////////////////////////// /////////////////////////

   protocol DelegateProtocol {

    func addText(String2: String)
}

////////////////////////////////////////// ////////////////////////

class ContViewController: UIViewController, DelegateProtocol {


    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "con" {

            let vc = segue.destination as! ViewController
            vc.delegate = self
        }
    }


    func addText(String2: String) {

        label.text = String2

    }


    @IBOutlet weak var label: UILabel!


    override func viewDidLoad() {
        super.viewDidLoad()

    }

}

首先在你的视图控制器中创建一个全局变量

private var viewController: YourVC?

然后给您的容器视图 segue 一个标识符并执行以下操作

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "yourviewcontroller Segue identifiew" {  //your container view segue identifier
        viewController = segue.destination as? SelectedImageVC
    }
}

现在您可以使用 viewController 访问容器视图控制器中的标签,例如

if let controller = viewController {
    controller.yourlabel.text = "text you want"
}