更新视图问题

时间:2013-03-17 17:00:05

标签: ios nsnotificationcenter

我认为在应用程序启动时加载ViewControllers时遇到问题。我有两个由TabBarController控制的ViewControllers。在ViewA上我有一个按钮,当单击该按钮时,它使用通知来调用ViewB中的方法来更新ViewB上的标签。但是,在我点击ViewB至少一次显示在屏幕上之前,标签不会改变。当我点击按钮而不必先点击ViewB时,我想知道是否有一种方法可以更新标签。

1 个答案:

答案 0 :(得分:0)

首先,在实际加载视图之前,IBOutlet属性设置为nil。因此,如果您在实际加载视图之前尝试设置IBOutlet标签的文本,则只需将消息发送到nil。

您可以尝试在ViewControllerB上调用loadView,然后将其初始化以从nib加载视图,尽管Apple文档说您不应该直接调用此方法。您也可以在ViewControllerB中创建一个属性,在其中设置更新的标签属性,并使用此属性在viewControllerB的viewWillAppear中设置IBOutlet。

我会推荐不同的东西;保存你希望viewB中的标签设置在ViewControllerb可访问的地方,然后在ViewControllerB的viewWillAppear中设置标签。例如,您可以将其保存在NSUserDefaults中:

NSString *viewBLabelText = @"ViewB Label Text";
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:viewBLabelText forKey:@"ViewBLabelText"];
[defaults synchronize];

然后在ViewControllerB的viewWillAppear中:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
self.labelProperty.text = [defaults objectForKey:@"ViewBLabelText"];