[英]Unable to Change UILabel.text from another View Controller, UILabel gets nil value
[英]UILabel.text in another ViewController returns nil
我试图通过单击另一个 ViewController 中的按钮来更改一个 ViewController 中 label 中的文本。
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")
}
这是第一个视图的代码 controller
class AddNew: UIViewController {
@IBOutlet weak var labelTextText: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
}
func printText(text:String) {
labelTextText?.text = text
}
这是第二个vc的代码。 如果我尝试更改它,它不会做任何事情。 我也尝试打印它,它只是打印为零。 如果我从同一视图 controller 打印或更改它,它确实有效。
任何想法将不胜感激。 谢谢!
我假设您正在使用 segue 在控制器之间切换,所以首先向 AddNew ViewController 添加一个文本属性,然后将您的 prepareForSegue 更改为
if segue.identifier == "yourSegueName" {
let addNewVC = segue.destinationViewController as! AddNew
AddNew?.text = "TEXT"
}
然后,当您加载 AddNew VC 时,将 labelTextText 更改为您之前定义的文本变量
这很容易解决。
labelTextText是从 UI 界面创建和引用的,例如 as.storyboard 或 .xib,因为它具有 IBOutlet。 因此,您必须通过以下 static function 获得 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")
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.