如何从app delegate自动重新加载呈现的表视图控制器的表视图单元?

时间:2015-03-27 11:37:50

标签: ios uitableview swift uilocalnotification presentviewcontroller

我正在创建一个应用程序,每30秒触发一次本地通知,当我点击通知时,它会打开一个表视图控制器。 此表视图控制器上有一个徽章,用于显示通知计数(如绿色图标中whatsapp中联系人显示的消息编号)。如果在应用程序处于活动状态时(即屏幕上有表视图控制器)收到通知,则应在单元格的徽章上更新通知计数。我是通过在我的应用委托的 didReceiveLocalNotification 方法中编写以下代码来完成此操作的:

var root = self.window!.rootViewController as ViewController
let main: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
var setview = main.instantiateViewControllerWithIdentifier("tableview") as TableViewController

if application.applicationState==UIApplicationState.Active
    {
        TableViewController().tableView.reloadData()
        root.dismissViewControllerAnimated(true, completion: nil) //I don't want to use this. Only badges should be updated
        root.presentViewController(setview, animated:true , completion: nil)   
}

1 个答案:

答案 0 :(得分:0)

  

当我点击通知时,它会打开一个表视图控制器。

那么为什么不在你点击通知时重新加载你的表呢?

您应该在ViewDidAppear上填充您的单元格数组,然后在UITableView中显示更新的单元格(带有您的徽章)。

或(其他想法) - 当您的UITableView仍处于打开状态时,为什么不使用NSNotification来更新TableView?

类似的东西:

在TableView类中:

    NSNotificationCenter.defaultCenter().addObserver(self, selector: "reloadTable:", name:"ReloadHandler", object: nil)

    func reloadTable(notification: NSNotification){
       .... populate your cell data array
       ... reload your table

     }

//在主视图控制器中(您收到UIApplicationState)

NSNotificationCenter.defaultCenter().postNotificationName("ReloadHandler", object: false)