【问题标题】:Changing label in one ViewController from a button in another ViewController从另一个 ViewController 中的按钮更改一个 ViewController 中的标签
【发布时间】:2014-05-13 00:12:42
【问题描述】:

我是 Obj-c 的新手,我一直在努力解决这个问题,我找到了一些帖子,但我无法让解决方案发挥作用。我不知道我做错了什么。

所以这是设置。我有一个带有按钮的视图控制器。该按钮在被触摸时应该会更新另一个视图控制器中的标签。

这是我到目前为止所做的。

VC1: 我已经在 VC1 的 header 中设置了属性:

MainScene *msc;

我在实现文件中有这个方法被点击按钮调用:

-(void) button {
        [msc updateLabel];
}

VC2: 这是方法updateLabel。

-(void)updateLabel {
    label.string = [NSString stringWithFormat:@"%.2LF", points];
}

我在标题中也有方法:

-(void)updateLabel;

不知道我在这里做错了什么。

【问题讨论】:

    标签: ios objective-c viewcontroller


    【解决方案1】:

    这不是它的工作原理。

    您首先从VC1 创建ViewController VC2 的实例。

    在展示之前,请在 VC2 属性上设置字符串值。

    【讨论】:

      【解决方案2】:

      您刚刚在 VC1 中定义了一个名为 msc 的属性,但您尚未将其分配给 VC2 的任何实例,因此当您尝试调用方法 updateLabel 时,什么也没发生。 在您的情况下,我假设 VC2 是父视图控制器,而 VC1 由 VC2 提供。所以你需要在 VC1 中设置一个协议和一个委托来更新 vc2 的标签。

      在 VC1 头文件中添加这些:

      @protocol VC1Delegate <NSObject>
      -(void)updateLabel;
      @end
      @property (weak, nonatomic) id<VC1Delegate> delegate;
      

      并在呈现 VC1 时设置 VC1 的委托 = VC2

      如果 VC1 是父视图控制器,事情会更容易,只需在将实例值分配给 msc 后使用[msc updateLabel];

      【讨论】:

      • 谢谢。我把那些加到VC1里了,等一下不小心发布了。现在输入
      • 好的,但是 VC1 是一个滚动视图。有一个按钮使 VC1 可见,然后有一个包含在滚动视图中的按钮,它应该改变 VC2 上的文本。所以基本上它只是一个可见性切换。那么如何将 VC1s delegate = 设置为 VC2?
      • @AlbertKornas 你需要清除 VC1 和 VC2 之间的关系。按钮使 VC1 可见,它在哪里? VC2?如果它在 VC2 中,则 VC2 是 VC1 的父级。如果它不在 VC2 中,那么您必须有另一个 VC 作为根 VC。在根 VC 的代码中进行所有这些更改。
      • 好的,我刚刚观看了有关协议和代表的视频,现在我对它有了更好的理解,但我仍然无法让它发挥作用。我的两个视图控制器被称为“Shop”和“MainScene”。在 MainScene 中,当单击按钮时,Shop 可见,然后在商店场景中有一个触发“UpdateLabel”的按钮,这应该会更改 MainScene 上标签中的文本。因此,我已经声明了您在帖子中放置的所有内容,协议和属性。我也声明了按钮方法。在 MainScene 标头中,我通过执行 ... 来遵守协议
      • @highwings 然后在 MainScene 实现文件中我有方法“UpdateLabel”,它改变了标签的文本。在商店实现文件中,我通过说“[self.delegate updateLabel];”来调用委托。我不确定我还缺少什么
      猜你喜欢
      • 1970-01-01
      • 2015-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多