我在显示和更新用户名标签时遇到此问题。
用户ID 1 - 'Felicia'
用户ID 2 - 'Sam'
(第一个屏幕:默认用户是' Felicia')
(第3个屏幕:点击另一个屏幕后,用户名的标签会自动恢复为' Felicia'当它应该是' Sam')
我理想的输出是用户名的标签将保留为所选用户,除非用户被更改,并且只要名称更新,也能够反映侧面菜单栏上的名称标签。
在我的代码中,我尝试在viewDidAppear和viewDidLoad中添加我的方法(getUserInfo()和setUserNameLabel()),但两种情况都没有生成我想要的输出。
viewDidAppear
优点: - 名称标签将反映所选用户姓名的更新(用户可以更改其姓名)
缺点: - 选择其他视图时,名称标签将恢复为侧面菜单栏上的用户ID 1名称
viewDidLoad中
优点: - 选择其他视图时,名称标签不会恢复为侧面菜单栏上的用户ID 1的名称
缺点 - 名称标签不会反映所选用户姓名的更新
答案 0 :(得分:1)
您需要在侧边菜单视图控制器中创建委托或使用NSNotificationCenter进行触发器名称更改事件。
因为在创建侧面菜单时,在此类viewDidLoad或在生命周期中调用一次的任何其他方法。
通过NSNotificationCenter执行此操作的示例。
答案 1 :(得分:0)
解决: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
中:使用所选用户更改用户界面。
加载选中(来自某个地方,如NSUserDefault)
if selected == `Felicia`
do UI update at main thread
if selected == `Sam`
do UI update at main thread
看看UIViewController生命周期: