如何使用单独的视图控制器从弹出视图更新 UIlabel

Posted

技术标签:

【中文标题】如何使用单独的视图控制器从弹出视图更新 UIlabel【英文标题】:How do I update a UIlabel from Popup View Using Separate View Controller 【发布时间】:2020-02-04 18:21:26 【问题描述】:

对 Swift 编程有点陌生,并且有一个关于从弹出视图更新现有 uilabel 的问题。我按照本教程进行操作:

YouTube

我有一个名为“myViewController”的主 ViewController 和一个名为“popUp”的弹出视图控制器。 在 myViewController 我有 1 x UILabel 这是一个插座:

@IBOutlet weak var myLabel: UILabel?

这个标签被填充到 viewDidLoad:

myLabel.text = "hello"

在弹出视图控制器上,我有 6 个按钮。每个按钮都有一个 IBAction:

  @IBAction func button1(_ sender: Any) 

//how do I set the uilabel from here to myViewController

dismiss(animated: true, completion: nil)

我像这样展示弹出窗口:

Storyboard Segue

我希望能够调出弹出控制器并选择一个 UI 按钮,它会自动关闭并更新第一个视图控制器上的标签。除了更新 UIlabel,我可以让一切正常工作。

希望有道理

谢谢你

【问题讨论】:

【参考方案1】:

例如,您可以使用通知或协议,让主视图控制器知道何时按下弹出控制器上的按钮。

https://developer.apple.com/documentation/foundation/nsnotificationcenter

https://docs.swift.org/swift-book/LanguageGuide/Protocols.html

【讨论】:

你好,我从这个答案中得到了它。谢谢 没问题,很高兴为您提供帮助。如果这对您有用,请单击接受(此答案)。谢谢。【参考方案2】:
You can create functions inside of myViewController that will get called when a button is pressed:

    //this would be in myViewController

    var labelText: String?
   // in viewDidLoad() 
    if myLabel.text != nil  
    myLabel.text 
     else  
    myLabel.text = "hello" 
     
    func changeLabelToSayFoo()  
    self.labelText = "Foo" 
    

    //this would be for the button in the pop up controller
    @IBAction func button1(_ sender: Any) 

    myViewController.changeLabelToSayFoo()

    dismiss(animated: true, completion: nil)
    

【讨论】:

您好,我之前尝试过这种方式,但出现以下错误。 线程 1:致命错误:在展开可选值时意外发现 nil 好的,这是有道理的。为 myViewController var labelText: String 中的文本设置一个值怎么样?然后在 viewDidLoad() if myLabel.text != nil myLabel.text else myLabel.Text = "hello" 将 changeLabelToSayFoo 更改为 func changeLabelToSayFoo() self.labelText = "Foo"

以上是关于如何使用单独的视图控制器从弹出视图更新 UIlabel的主要内容,如果未能解决你的问题,请参考以下文章

如何从弹出视图中关闭第二个视图控制器

从弹出框 VC 中返回第一个视图控制器

如何从弹出视图控制器获取数据到自定义表格视图单元格?

从弹出控制器推送视图控制器

从弹出的视图控制器传递数据

从弹出框呈现模态视图控制器