viewDidLoad 与 viewDidAppear - 名称标签问题

viewDidLoad vs viewDidAppear - Name Label issues

我在显示和更新用户名标签时遇到了这个问题。

用户 id 1 - ‘Felicia’

用户 id 2 - ‘Sam’

(第一个屏幕:默认用户是 'Felicia')

(第 2 屏:将用户更改为 'Sam' 时)

(第 3 个屏幕:点击另一个屏幕后,用户名的标签自动恢复为 'Felicia',而它应该是 'Sam')

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

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

viewDidAppear

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

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

viewDidLoad

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

缺点 - 姓名标签不会反映所选用户姓名的更新

解决方法:viewWillAppearviewWillLayoutsubviews

怎么样

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

伪代码:

var selected = Felicia
if `Felicia` clicked:
   selected = Felicia
if `Sam` clicked:
   selected = Sam
(save selected to somewhere like NSUserDefault)

并且在您的侧面菜单中 viewWillAppear:更改 UI 与选定的用户。

加载所选内容(来自 NSUserDefault 之类的地方)

if selected == `Felicia` 
  do UI update at main thread
if selected == `Sam`
  do UI update at main thread

看看 UIViewController 生命周期:

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

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

通过 NSNotificationCenter 执行此操作的示例。