1

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

4

1 回答 1

0

一方面,在实际加载视图之前,IBOutlet 属性设置为 nil。因此,如果您尝试在实际加载视图之前设置 IBOutlet 标签的文本,您只会向 nil 发送消息。

在初始化 ViewControllerB 以从 nib 加载视图后,您可以尝试在 ViewControllerB 上调用 loadView,尽管 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"];
于 2013-03-17T19:33:57.233 回答