一旦我的应用程序即将进入前台,我希望我的TableView重新加载数据。我已经完成了以下操作,但它不起作用:
override func viewWillAppear(_ animated: Bool) {
//registering ContactsVC as an Observer
NotificationCenter.default.addObserver(self,selector: #selector(willEnterForeground),name: NSNotification.Name.UIApplicationWillEnterForeground,object: nil)
}
override func viewDidDisappear(_ animated: Bool) {
//remove ContactsVC as the observer when your view is going away
NotificationCenter.default.removeObserver(self, name: NSNotification.Name.UIApplicationWillEnterForeground, object: nil)
}
@objc func willEnterForeground() {
print("print if willEnterForeground() is called")
self.tableView.reloadData()
}
我的函数处理程序中的print语句会在控制台上打印出来,但tableview不会重新加载。
答案 0 :(得分:1)
在ViewDidLoad中,
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(self, selector: #selector(self.reloadData(_:)), name: UIApplication.willEnterForegroundNotification, object: nil)
}
在Deinit中,删除观察者,
deinit() {
NotificationCenter.default.removeObserver(self, name: NSNotification.Name(rawValue: UIApplication.willEnterForegroundNotification), object: nil)
}
在主调度队列中重新加载表,
@objc func reloadData(_ notification: Notification?) {
DispatchQueue.main.async {
[weak self] in
self?.tableview.reloadData()
}
}
答案 1 :(得分:0)
重新加载tableView,你可以简单地添加
tableView.reloadData()
在viewWillAppear() method.
答案 2 :(得分:0)
转到AppDelegate并添加通知
[[NSNotificationCenter defaultCenter] postNotificationName:@"NotificationToReload" object:nil];
in
- (void)applicationDidBecomeActive:(UIApplication *)application
然后转到所需的View Controller,并在ViewDidload中添加与
相同的通知[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(forceUpdateSkip:) name:@"NotificationToReload" object:nil ];
然后在同一个ViewController
中添加通知功能-(void)forceUpdateSkip:(NSNotification*)notification{
[tableview reloadData];
}
而不是tableview替换你的表名。
现在只要应用程序进入Foreground,就会调用通知,表格将被重新加载。
OR
请按照此选项
只需添加
[tablename reloadData];
in
-(void)viewWillAppear:(BOOL)animated
答案 3 :(得分:0)
尝试使用dispatchQueue重新加载tableview数据。
请参阅此链接:https://www.raywenderlich.com/60749/grand-central-dispatch-in-depth-part-1
答案 4 :(得分:0)
Swift 4.1
在AppDelegate中
func applicationWillEnterForeground(_ application: UIApplication) {
NotificationCenter.default.post(name: NSNotification.Name("ReloadNotification"), object: nil)
}
然后转到所需的View Controller并在ViewDidload中
NotificationCenter.default.addObserver(self, selector: #selector(self.reloadData(_:)), name: NSNotification.Name("ReloadNotification"), object: nil)
最后,在ViewController中添加通知功能
func reloadData(_ notification: Notification?) {
self.tableview.reloadData()
}