【问题标题】:UILabel.text in another ViewController returns nil另一个 ViewController 中的 UILabel.text 返回 nil
【发布时间】:2020-10-14 03:51:59
【问题描述】:

我正在尝试通过单击另一个 ViewController 中的按钮来更改一个 ViewController 中标签中的文本。

class Home: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view.
}
var add = AddNew()

@IBAction func buttonChangeText(_ sender: Any) {
    add.printText(text: "TEXT")
}

这是第一个视图控制器的代码

class AddNew: UIViewController {


@IBOutlet weak var labelTextText: UILabel!

override func viewDidLoad() {
    super.viewDidLoad()
    
}

func printText(text:String) {
     labelTextText?.text = text
 }

这是第二个 vc 的代码。 如果我尝试更改它,它不会做任何事情。我也尝试打印它,它只是打印为零。如果我从同一个视图控制器打印或更改它,它确实可以工作。

任何想法都会受到赞赏。谢谢!

【问题讨论】:

    标签: ios swift xcode uibutton uilabel


    【解决方案1】:

    这很容易解决。

    labelTextText 是从 UI 界面(如 .storyboard 或 .xib)创建和引用的,因为它具有 IBOutlet。 因此,您必须通过以下静态函数获取 Class AddNew 的新实例。

    class AddNew: UIViewController {
        class func storyboardInstance() -> AddNew {
            let storyboard = UIStoryboard(name: "Main", bundle: Bundle.main)
            return storyboard.instantiateViewController(withIdentifier: "AddNew") as! AddNew
        }
    }
    

    这是新方法。

    var add = AddNew.storyboardInstance()
    
    @IBAction func buttonChangeText(_ sender: Any) {
        add.printText(text: "TEXT")
    }
    

    【讨论】:

      【解决方案2】:

      我假设您使用 segue 在控制器之间切换,所以首先向 AddNew ViewController 添加一个文本属性,然后将您的 prepareForSegue 更改为

      if segue.identifier == "yourSegueName" {
          let addNewVC = segue.destinationViewController as! AddNew
          AddNew?.text = "TEXT"
      }
      

      然后,当您加载 AddNew VC 时, 将 labelTextText 更改为您之前定义的文本变量

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-11-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-16
        相关资源
        最近更新 更多