【问题标题】:Passing UILabel's text from one viewcontroller to another将 UILabel 的文本从一个视图控制器传递到另一个视图控制器
【发布时间】:2013-04-13 03:53:34
【问题描述】:

是的,我知道人们已经安静地询问了这个问题。

我正在寻找有关如何使用 @properties 将数据从一个视图控制器传递到另一个视图控制器的帮助..

我没有在此处发布代码,而是发布了一个免费的示例代码,您可以从打开的 Dropbox 文件夹中获取该代码。

感谢任何帮助,但请记住,我正在寻求帮助,但我没有使用故事板进行开发,所以我不能使用 prepareForSeque

网址:https://www.dropbox.com/sh/l7xagtqqprcjqr2/gplHMvM2-O

【问题讨论】:

  • 当你初始化viewController时,这个viewController的view没有被初始化,意味着view没有被加载到内存中。除非你写一些像 self.view.backgroundColor = [UIColor redColor] 这样的代码,它会调用 viewDidload。

标签: ios xcode xib viewcontroller nib


【解决方案1】:

好的,所以,在 SecondViewController 中,您已经创建了一个 UserText UITextField - 实际发生的是:

  1. SecondViewController *SecondView = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];
  2. SecondView.UserText = TextField.text;
  3. SecondViewController viewDidLoad 被调用,UserText 通过 IBOutlet 被正确引用覆盖。

这几乎是人们不断犯的错误;初始化 viewcontroller 并不能保证 viewDidLoad 在你想要的时候被调用。

所以有几种方法可以做到这一点,

  1. 在 SecondViewController 中设置 NSString 属性
  2. 将文本传递给 SecondViewController 的 initWithNibName 方法,如下所示:

    - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil text:(NSString *) text

选项 2 需要一个 NSString 属性。您不能将文本分配给通过 IBOutlet 连接的 UILabel,这是因为,一旦您初始化视图控制器,就会调用 viewDidLoad。

【讨论】:

  • “不能保证 viewDidLoad 在你想要的时候被调用。”......你是对的,但它是在应用程序启动时调用 SecondView.userText = Textfield .text 会在应用程序的整个过程中保持不变,这意味着您不必调用 SecondView.UserText = TextField.text;每次你调用一个动作,或者一个视图出现......
  • 但是你不能在第一次调用 viewDidLoad 之前调用它,并且唯一知道何时调用 viewDidLoad 的时间是从它内部,或者 viewWillAppear/viewDidAppear 方法。要么将字符串存储为属性,要么将文本存储为 parentViewController 范围之外的数据存储,SecondViewController 可以访问它的地方。此外,按照当前的设置方式,如果您执行 UserText = TextField,它看起来会泄漏(您不能将 TextField.text 分配给 UserText,因为一个是 NSString,而另一个是 UITextField。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多