我有两个视图控制器,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/