我有一个标签栏控制器,其中一个标签是我的主屏幕,另一个是设置页面。在设置页面上,用户可以编辑随后保存在NSUserDefaults中的内容,但是当它们返回到主页选项卡时,由于视图已加载,因此不会立即反映这些更改。当我返回该标签时,如何让视图完全刷新?
答案 0 :(得分:0)
viewDidLoad仅在首次加载视图控制器的视图时调用 - 之后它将保留在内存中,因此通常在创建视图控制器的另一个实例之前不会再次调用它。
因此,不是在viewDidLoad()中编写您可能编写的逻辑,而是将代码写入/放入viewWillAppear()中,此视图出现时会调用此方法。因此,您的NSUserDefaults值将使用将覆盖现有值的新值进行设置。
//希望我能以某种方式帮助你,快乐编码:)
答案 1 :(得分:0)
这取决于您何时想要刷新视图。
1.如果打开视图,您是否每次都要刷新。 2.您是否只想在更改设置时刷新视图?
如果是第一个,则在viewWillAppear中编写刷新逻辑 如果是第二个,则可以在用户设置更改时添加通知。
在HomeVC中,将该通知添加为观察者并更新该观察者方法上的标签
发布通知的代码:
[[NSNotificationCenter defaultCenter] postNotificationName:@"settingsChanged" object:nil];
接收通知的代码:
在HomeVC ViewWillAppear:
[[NSNotificationCenter defaultCenter] removeObserver:self];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(refreshViews:) name:@"settingsChanged" object:nil];
在HomeVC上实施该方法
- (void)refreshViews:(NSNotification *)notification {
NSLog(@"Received Notification - Someone seems to have logged in");
}