0

我有两个视图控制器,FirstViewController 和 FourthViewController。FirstViewController 是我的初始视图控制器。我在 FirstViewController 中有一个 UILabel,mainLab。我提出了 FourthViewController

[self presentViewController:[self.storyboard instantiateViewControllerWithIdentifier:@"FourthViewController"] animated:YES completion:nil];

然后,在推送 FourthViewController 后,我使用委托尝试更改 FirstViewController 中 mainLab 的文本。然而,这并没有改变 mainLab 的文本。我检查并在视图控制器被推送后 mainLab 确实变为空。话虽如此,即使 mainLab 被 FourthViewController 的推送取消,我将如何在推送 FourthViewController 时更改标签的文本?

4

1 回答 1

0

你应该展示你的一些代码。但是,这是我从了解视图控制器生命周期之前的类似经历中得出的猜测(顺便说一句,这是有据可查的)。

我假设您UILabel直接在委托方法中设置 UIControls (等)。如果这是真的:不要戴帽子。不要IBOutlet在没有视图控制器的情况下直接访问任何项目或查看项目。

而是声明一个NSNumberor属性,NSString非常适合携带您要设置的数据。提供一个自定义设置器,它也设置相关UILabel等,但前提是它不为零。(您也可以声明私有实例变量并提供准设置器方法。)在您的viewDidLoad方法中,也UILables可以根据属性的值设置等。

在您的情况下发生的事情是您设置了 UILable 之前甚至之后的文本presentViewController。在您的单行代码中,您甚至可以实例化视图控制器然后呈现它。从字面上理解。视图控制器已实例化。这意味着创建了一个新值并且所有值都获得了它们的默认值(在某些情况下可能是 nil 或空字符串或情节提要中设置的任何内容)。

但是,即使您UILabel在那之后直接从调用视图控制器访问(等),也不能保证新实例化的视图控制器在此期间已经完全加载。如果稍后加载新的视图控制器,那么您的设置将再次被覆盖。除非你听从我的建议。

还有其他“黑客”旨在在实际设置其视图项值之前强制加载新的视图控制器。我尝试了其中的一两个,它们工作得很好。但是不能保证它们将来也会起作用,这就是为什么我建议正确地做。

于 2013-08-13T07:56:31.893 回答