我有两个视图控制器,FirstViewController和FourthViewController。 FirstViewController是我的初始视图控制器。我用
呈现FourthViewControllerUIViewController *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文本没有更新。有谁知道为什么?
答案 0 :(得分:3)
当您从FourthViewController.m调用此行时,实际上是在创建FirstViewController的新实例,而不是使用已创建的实例。
UIViewController *firstController = [self.storyboard
instantiateViewControllerWithID:@"First"];
你可以通过两种方式解决这个问题。
从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
}
}
已经在stackoverflow中解释了here。基本思想是创建FourthViewController委托,并为updateLabel创建委托方法。 FirstViewController应该实现这个方法。
答案 1 :(得分:0)
如果您想在第一个屏幕上更新标签而没有其他内容,请转到通知。你最好写代表。因为您只想更新标签文本。