【问题标题】:Update a label through button from different view通过按钮从不同的视图更新标签
【发布时间】:2026-02-10 17:00:02
【问题描述】:

当它们都在不同类的 uiview 控制器中时如何通过按钮单击更新标签...单击按钮时,标签应该更新...我尝试了很多次..但它没有发生..

还有一个问题是我的应用在模拟器中运行良好,但是当我在设备上运行时,动态创建的按钮(按钮图像)不可见,动作正在执行但图像丢失..我知道为什么吗?

【问题讨论】:

  • 还有一个问题是,当应用程序运行乐谱时,正确的图像会被正确的 png 文件勾选 n 错误的 png 文件,但是当应用程序关闭并重新启动时,分数会刷新...... .如果我们来回前进分数和图像是好的..但是当应用程序关闭时,分数是0...
  • 如何通过编码锁定和解锁游戏的关卡....我使用了level.enabled=NO;我的游戏应用程序的第一级已打开,其他级别已锁定..所以我保留了一个条件,一旦满足条件,它就会解锁该级别..但我的问题是当我按下返回按钮然后再次解锁下一个级别哪些已打开...有人可以帮我吗...ThankQ i​​n adv...

标签: ios sdk uibutton uilabel ios4


【解决方案1】:

有几种方法可以在 iOS 中保持视图(实际上是视图控制器)之间的通信。对我来说最简单的是发送通知。您在要进行更改的视图中为通知添加观察者,然后从将触发更改的视图中发布通知。这样你就可以从 ViewController B 告诉 ViewController A “东西准备好了,做出改变”

当然,这需要您创建接收器视图并且已经在监听通知。

在 ViewController B(发送者)中

- (void)yourButtonAction:(id)sender
{
    [[NSNotificationCenter defaultCenter] postNotificationName:@"theChange" object:nil];
}

在 ViewController A (receiver) 添加观察者来监听通知:

- (void)viewDidLoad
{
    //.........
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(makeTheChange) name:@"theChange" object:nil];
}

不要忘记删除它(在这种情况下,在dealloc

- (void)dealloc
{
     [[NSNotificationCenter defaultCenter] removeObserver:self name:@"theChange" object:nil];
     [super dealloc];
}

最后,更新标签的方法

- (void)makeTheChange
{
    yourLabel.text = @"your new text";
}

【讨论】:

  • 感谢您的评论/回复..会试试这个。
  • 哪里失败了?哪个方法没有被调用?一些细节会很棒。
  • 我只是在我的应用程序中添加了你的方法......它运行成功,但是当我为我的图像给出正确答案时,并返回检查它是否已更改。 .但它没有改变....我力求保留断点并检查它停止的位置...
  • 即使我尝试使用 label1.text=[NSString stringWithFormat:@"%@",15-hits];标签 2,3 相同,但未显示...在 nslog 中显示为 14hits是必需的,需要 13 次点击……但是当我返回并再次检查时,它显示 15 次点击是必需的……并将标签文本检查为 label1.text 并显示为 null ..
  • Null 表示您没有初始化标签。如果您以编程方式添加它们,请不要忘记使用[[UILabel alloc] init]...[view addSubview:yourLabel]。或者,如果您将它们添加到 xib 文件中,那么您一定忘记将它们正确链接到您的 IBOutlet 标签。按住 Control 并拖动到 xib 文件中的标签,然后在出现的小窗口中选择标签的名称。
【解决方案2】:

不确定这是否是一个好的解决方案,但您可以在单击按钮时将文本存储在全局 NSString 中,然后在加载第二个视图时将该字符串放入标签中。

【讨论】:

  • 因为我使用 plist 来记录分数、图像和提示...所以我需要将所有标签文本存储在数据库中吗?
最近更新 更多