我有两个视图控制器,FirstViewController和FourthViewController。 FirstViewController是我的初始视图控制器。我提出了FourViewController与

UIViewController *fourthController = [self.storyboard instantiateViewControllerWithID:@"Fourth"];
[self presentViewController:fourthController animated:YES completion:nil];

然后,在FourthViewController的.m文件中,我想在FirstViewController中更改UILabel的文本。所以我用
UIViewController *firstController = [self.storyboard instantiateViewControllerWithID:@"First"];
firstController.mainLab.text = [NSMutableString stringWithFormat:@"New Text"];

但是,我使用后
[self dismissViewControllerAnimated:YES completion:nil];

我发现mainLab的文本尚未更新。有人知道为什么吗?

最佳答案

当您从FourthViewController.m调用此行时,实际上是在创建FirstViewController的新实例,而不是使用已经创建的实例。

UIViewController *firstController = [self.storyboard
                             instantiateViewControllerWithID:@"First"];

您可以通过两种方式解决此问题。

1)使用通知

需要更改标签文本时,从FourthViewController发布通知。
[[NSNotificationCenter defaultCenter] postNotificationName:@"updateLabel"
        object:self];

在您的FirstViewController viewDidLoad方法中,创建一个观察者,等待该通知被触发。
[[NSNotificationCenter defaultCenter] addObserver:self
        selector:@selector(updateLabelCalled:)
        name:@"updateLabel"
        object:nil];

实现updateLabelCalled:并更新标签。
- (void) updateLabelCalled:(NSNotification *) notification
{
    if ([[notification name] isEqualToString:@"updateLabel"]){
        //write code to update label
    }

}

2)实施委托

在stackoverflow中已经解释了here。基本思想是您创建一个FourthViewController委托,并创建一个委托方法来updateLabel。 FirstViewController应该实现此方法。

关于ios - 在另一个下面的 View Controller 中更新uilabel,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18200668/

10-13 06:55