无法从另一个视图控制器更改 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 的文本的主要内容,如果未能解决你的问题,请参考以下文章

UILabel 不会改变屏幕

使更改 UILabel 文本不触发自动布局

如何从另一个视图控制器更改标签的文本并使用核心数据保存

无法从另一个视图控制器获取表视图数据

无法更改 UILabel 的文本

自定义 UICollectionViewCell 中的 UILabel 始终为空,无法更新文本