在视图控制器之间移动信息

Posted

技术标签:

【中文标题】在视图控制器之间移动信息【英文标题】:Moving Info Between View Controllers 【发布时间】:2014-07-07 01:52:15 【问题描述】:

我是 ios 新手,正在尝试找出一些可能是基本的东西。我有两个 UIView,每个页面上有四个按钮,每个按钮下面有四个标签。基本上,如果我按下视图控制器 1 上的按钮 1,我希望视图控制器 2 上的所有标签都简单地读取“2”。这是一个更好的视觉图像:

我为视图控制器 1 上的每个 UIButton 设置了插座,并为视图控制器 2 上的每个标签设置了插座。

- (IBAction)button1Pressed:(id)sender 

    UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Main_iPhone" bundle:nil];
    UIViewController *vc = [sb instantiateViewControllerWithIdentifier:@"viewController2"];
    vc.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
    [self presentViewController:vc animated:YES completion:NULL];

    ViewController2 *vc2 = [[ViewController2 alloc]init];
    vc2.label1.text = @"1";
    vc2.label2.text = @"1";
    vc2.label3.text = @"1";
    vc2.label4.text = @"1";


它过渡得很好。但是,我在过渡期间尝试更改标签的文本时遇到了麻烦。我收到三个错误:“Unknown receiver: ViewController2”、“Unknown type name: ViewController2”和“Property label1 not found on type of ViewController *”。因此,看来我在设置更改文本时遇到了麻烦。有谁知道我在这里做错了什么?

【问题讨论】:

【参考方案1】:

替换

vc2.label1.text = @"1";
vc2.label2.text = @"1";
vc2.label3.text = @"1";
vc2.label4.text = @"1";

vc.label1.text = @"1";
vc.label2.text = @"1";
vc.label3.text = @"1";
vc.label4.text = @"1";

然后删除

ViewController2 *vc2 = [[ViewController2 alloc]init];

【讨论】:

谢谢。我这样做了,我收到错误“在 UIViewController 类型的对象上找不到属性 label1”。 哦,我明白了。您将要创建一个继承自 UIViewController 并具有 4 个标签的公共属性的新类。然后创建 vc 作为那种类型的视图控制器,而不仅仅是标准的。 谢谢。这超出了我的想象,但我会研究它 我发现 AppCoda 教程非常擅长解释此类内容。我相信他们有关于使用 segues 传递数据的教程【参考方案2】:

您正在呈现的视图控制器,即将出现的视图控制器是vc。这就是您要设置标签的位置。

代码的最后五行中提到的东西vc2 什么都不是:它只是你为五行带来的东西,然后它就烟消云散了,毫无意义。甚至很难想象这些代码行的用途是什么。

【讨论】:

以上是关于在视图控制器之间移动信息的主要内容,如果未能解决你的问题,请参考以下文章

如何使用自动布局在两个子视图控制器之间移动?

如何以编程方式在 Xcode 中的视图控制器之间移动用户?

在视图控制器之间移动和传递数据的正确方法

iOS - 如何在不按下按钮的情况下在视图控制器之间移动

通过替换 Windows 根控制器在多个故事板之间移动

高效地在视图控制器之间切换