Ios 从另一个ViewController中的按钮更改一个ViewController中的标签

Ios 从另一个ViewController中的按钮更改一个ViewController中的标签,ios,objective-c,viewcontroller,Ios,Objective C,Viewcontroller,我是Obj-c的新手,我一直在努力解决这个问题,我找到了一些帖子,但我无法找到有效的解决方案。我不知道我做错了什么 这就是设置。我有一个带按钮的viewcontroller。当触摸该按钮时,该按钮将更新另一个viewcontroller中的标签 这就是我到目前为止所做的 VC1: 我已在VC1的标题中设置了属性: MainScene *msc; 单击按钮时,我在实现文件中调用了此方法: -(void) button { [msc updateLabel]; } VC2: 下面

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

这就是设置。我有一个带按钮的viewcontroller。当触摸该按钮时,该按钮将更新另一个viewcontroller中的标签

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

VC1: 我已在VC1的标题中设置了属性:

MainScene *msc;
单击按钮时,我在实现文件中调用了此方法:

-(void) button {
        [msc updateLabel];
}
VC2: 下面是updateLabel方法

-(void)updateLabel {
    label.string = [NSString stringWithFormat:@"%.2LF", points];
}
我在标题中还有方法:

-(void)updateLabel;

我不确定我做错了什么。

这不是它的工作原理

首先从
VC1
创建
ViewController VC2
的实例


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

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

将这些添加到VC1头文件中:

@protocol VC1Delegate <NSObject>
-(void)updateLabel;
@end
@property (weak, nonatomic) id<VC1Delegate> delegate;
@protocol VC1Delegate
-(作废)更新标签;
@结束
@属性(弱、非原子)id委托;
并在演示VC1时将VC1的委托设置为VC2


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

谢谢。我在VC1中添加了这些,等等,意外发布。现在输入好的,但是VC1是一个滚动视图。有一个使VC1可见的按钮,然后有一个包含在scrollview中的按钮,该按钮将更改VC2上的文本。所以基本上它只是一个可见性切换。那么,如何将VC1s delegate=设置为VC2?@AlbertKornas您需要清除VC1和VC2之间的关系。该按钮使VC1可见,它在哪里?VC2?如果在VC2中,则VC2是VC1的父级。如果它不在VC2中,那么您必须有另一个VC作为根VC。在根VC的代码中做所有这些更改。好吧,我刚刚看了一个关于协议和委托的视频,现在我更了解了,但是我仍然很难让它正常工作。我的两个视图控制器分别称为“Shop”和“Main Scene”。在MainScene中,单击按钮时,商店可见,然后在商店场景中有一个按钮触发“UpdateLabel”,这将更改MainScene上标签中的文本。所以,我已经声明了你在帖子中的所有内容,协议和属性。我还声明了buttons方法。在主场景标题中,我通过执行…@highwings来遵守协议,然后在主场景实现文件中,我使用“UpdateLabel”方法来更改标签的文本。在shop实现文件中,我通过说“[self.delegate updateLabel];”来调用代理。我不确定我还缺少什么