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 的名称
缺点
- 姓名标签不会反映所选用户姓名的更新
解决方法:viewWillAppear
或 viewWillLayoutsubviews
怎么样
我认为 viewWillAppear
或 viewWillLayoutsubviews
(如果您使用自动布局)是您所需要的。
当您从 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 执行此操作的示例。
我在显示和更新用户名标签时遇到了这个问题。
用户 id 1 - ‘Felicia’
用户 id 2 - ‘Sam’
(第一个屏幕:默认用户是 'Felicia')
(第 2 屏:将用户更改为 'Sam' 时)
(第 3 个屏幕:点击另一个屏幕后,用户名的标签自动恢复为 'Felicia',而它应该是 'Sam')
我的理想输出是用户名的标签将保留为所选用户,除非用户发生更改,并且每当名称更新时都能够在侧面菜单栏上反映名称标签。
在我的代码中,我尝试在 viewDidAppear 和 viewDidLoad 中添加我的方法(getUserInfo() 和 setUserNameLabel()),但是这两种情况都没有生成我想要的输出。
viewDidAppear
优点: - 名称标签将反映所选用户名称的更新(用户可以更改他们的名称)
缺点: - 选择其他视图时,名称标签将恢复为侧边菜单栏上用户 ID 1 的名称
viewDidLoad
优点: - 选择其他视图时,名称标签不会恢复为侧面菜单栏上用户 ID 1 的名称
缺点 - 姓名标签不会反映所选用户姓名的更新
解决方法:viewWillAppear
或 viewWillLayoutsubviews
我认为 viewWillAppear
或 viewWillLayoutsubviews
(如果您使用自动布局)是您所需要的。
当您从 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 执行此操作的示例。