Ios viewDidLoad与ViewDidDisplay-名称标签问题

Ios viewDidLoad与ViewDidDisplay-名称标签问题,ios,swift3,viewdidload,viewdidappear,Ios,Swift3,Viewdidload,Viewdidappear,关于用户名标签的显示和更新,我遇到了这个问题 用户id 1-“Felicia” 用户id 2-“Sam” (第一屏:默认用户为“Felicia”) (第二屏:将用户更改为“Sam”时) (第三个屏幕:点击另一个屏幕后,用户名的标签自动恢复为“Felicia”,当它应该是“Sam”时) 我的理想输出是,除非用户发生更改,否则用户名标签将保持为所选用户,并且在名称更新时能够在侧菜单栏上反映名称标签 在我的代码中,我尝试在ViewDidDisplay和viewDidLoad中添加我的方法(get

关于用户名标签的显示和更新,我遇到了这个问题

用户id 1-“Felicia”

用户id 2-“Sam”

(第一屏:默认用户为“Felicia”)

(第二屏:将用户更改为“Sam”时)

(第三个屏幕:点击另一个屏幕后,用户名的标签自动恢复为“Felicia”,当它应该是“Sam”时)

我的理想输出是,除非用户发生更改,否则用户名标签将保持为所选用户,并且在名称更新时能够在侧菜单栏上反映名称标签

在我的代码中,我尝试在ViewDidDisplay和viewDidLoad中添加我的方法(getUserInfo()和setUserNameLabel()),但是这两种方案都没有生成我想要的输出

视图显示

优点: -名称标签将反映所选用户名的更新(用户可以更改其名称)

缺点: -选择其他视图时,名称标签将恢复为侧菜单栏上用户id 1的名称

viewDidLoad

优点: -选择其他视图时,名称标签不会恢复为侧菜单栏上用户id 1的名称

缺点
-名称标签不会反映所选用户名的更新情况。解决方法:如何处理
视图将出现
视图将布局子视图

我认为
视图将出现
视图将布局子视图
(如果您使用自动布局)是您所需要的。 当您从
Felicia
切换到
Sam
时,必须将该状态保存到某个位置,以便在重新打开侧菜单时参考

伪代码:

var selected = Felicia
if `Felicia` clicked:
   selected = Felicia
if `Sam` clicked:
   selected = Sam
(save selected to somewhere like NSUserDefault)
在您的侧边菜单中,将出现
视图
:使用所选用户更改用户界面

加载所选内容(从NSUserDefault之类的位置)

查看UIViewController生命周期:


您需要为侧菜单viewcontroller中的触发器名称更改事件创建委托或使用NSNotificationCenter

因为当您创建侧菜单时,在这个类中viewDidLoad或任何其他方法在生命周期中调用一次

通过NSNotificationCenter执行此操作的示例


我尝试过ViewWillDisplay,它的工作原理与ViewDidDisplay相同。。viewWillLayoutsubviews也不起作用:(@Meebfel啊,我的意思是你应该根据所选用户的值更新你的视图。我设法将所选用户名保存到一个变量中。但是ui无法更新。我想这是因为方法:setUserNameLabel()和getUserInfo()。我已经将这两个方法放入了ViewDidDisplay中。如果我希望在应用程序启动时只加载一次,您知道我还能将这两个方法放在哪里吗?您有任何示例吗?我有通过NSNotification进行的示例。因此我将在回答中进行更新。如何使用NSNotificationCenter触发名称更改事件?您可以通过发送(Post)进行触发通知:在上面的文章中。当您创建或生成事件时,您需要使用这行代码作为触发器。我建议不要使用通知。只对多个广播使用通知。
if selected == `Felicia` 
  do UI update at main thread
if selected == `Sam`
  do UI update at main thread