无法从另一个视图控制器更改 UILabel 的文本
Posted
技术标签:
【中文标题】无法从另一个视图控制器更改 UILabel 的文本【英文标题】:Can't change UILabel's text from another View Controller 【发布时间】:2014-06-22 20:46:26 【问题描述】:我有两个视图控制器,一个带有一个文本字段和一个“下一步”按钮,另一个只有一个标签。这个想法是您在文本字段中填写您的姓名,然后单击“下一步”。然后它应该切换到另一个视图并且标签应该显示你的名字。
但是,当我切换视图时,标签只是空的。我对 Objective-C 比较陌生,我希望有人知道为什么会这样:)。
ViewController.m:
@interface ViewController ()
IBOutlet UILabel *label;
IBOutlet UITextField *textField;
-(IBAction)go:(id)sender
label.text = textField.text;
-(IBAction)remove:(id)sender
[sender resignFirstResponder];
【问题讨论】:
在上面的代码中,我只看到一个视图控制器,与您的描述不符。但是,一个常见的错误是在设置 IBOutlet 之前尝试对其进行操作。在调用-viewDidLoad
之前,IBOutlet 将为 nil。
感谢您的回答!我的意思是说我有一个情节提要,情节提要里面有两个视图控制器。我只有一个 ViewController.h 和一个 ViewController.m。
【参考方案1】:
你说你有两个视图控制器。第一个 View Controller 有一个 UITextField 实例和一个 UIButton。您的第二个视图控制器只有一个 UILabel 实例。
但是,我在您的代码中注意到 ViewController.m(我假设它是您的第一个视图控制器)有两个 IBOutlet,一个用于 UILabel,一个用于 UITextField,这没有意义,因为应该使用 UILabel成为您的第二个视图控制器的一部分。
您需要做的是从您的第一个视图控制器中正确删除 UILabel 的 IBOutlet。然后,在您的第二个视图控制器中,为其 UILabel 添加 IBOutlet。
然后,您需要在您的第一个 View Controller 中实现 prepareForSegue 方法并添加如下代码语句:
[[segue destinationViewController]label].text = textField.text;
这样,当执行 segue 时,您将成功地将您的第一个 View Controller 的文本字段的文本传递给您的第二个 View Controller 的标签。
【讨论】:
谢谢!我将查找 prepareForSegue 方法。这正是我所需要的。 完成!同样,对于任何想要直观解释的人,请查看这个出色的教程:youtube.com/watch?v=a5yA6ywgGbc以上是关于无法从另一个视图控制器更改 UILabel 的文本的主要内容,如果未能解决你的问题,请参考以下文章