【问题标题】:Can't change UILabel's text from another View Controller无法从另一个视图控制器更改 UILabel 的文本
【发布时间】: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。

标签: objective-c xcode xcode5


【解决方案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
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-13
  • 1970-01-01
  • 1970-01-01
  • 2014-09-11
  • 2016-09-02
  • 1970-01-01
相关资源
最近更新 更多