如何在应用程序即将变为活动状态后刷新TableView?

时间:2018-01-03 15:12:16

标签: ios swift uitableview ios11

一旦我的应用程序即将进入前台,我希望我的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不会重新加载。

5 个答案:

答案 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()
}