当应用程序是前台时,重新加载表视图而无需用户交互

时间:2017-01-29 11:30:42

标签: uitableview swift3 reloaddata

当您使用reloadData()时,Swift提供了一种更新表视图更改的强大方法。但它适用于某些地方viewDidLoadviewDidAppearrefreshControl。当tableView获得自动重新加载数据的方式时会更好。当应用程序处于前台时,可以更新tableView吗?您可以在iOS Reminders应用中看到诸如效果。

示例:iOS Reminder

假设您已安排提醒。并且您仍在使用该应用程序,此时您的预定通知被触发并提示您必须执行某些操作。此时,当您无所事事且detailTextLabel变为红色时,您的预定提醒将成为过期项目。没有任何用户交互。

这就是我所做的:

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)

    // Configure the cell...
    let managedObject = self.fetchedResultsController.object(at: indexPath)

    cell.textLabel?.text = managedObject.value(forKey: "string") as? String
    cell.detailTextLabel?.text = "\(managedObject.value(forKey: "date") as! Date)"

    print("Get called")

    for viewController in (self.tabBarController?.viewControllers)! {

        let overdue = self.fetchedResultsController.fetchedObjects?.filter({ (record) -> Bool in
            return (record.date?.compare(Date()) != .orderedDescending)
        })

        if viewController.tabBarItem.tag == 1 {

            if overdue?.count == 0 {
                DispatchQueue.main.async(execute: {
                    viewController.tabBarItem.badgeValue = ""
                    viewController.tabBarItem.badgeColor = UIColor.clear

                })
            } else if overdue?.count != 0 {
                DispatchQueue.main.async(execute: {
                    viewController.tabBarItem.badgeValue = "\(overdue!.count)"
                    viewController.tabBarItem.badgeColor = UIColor.init(red: 0.0, green: 0.5, blue: 0.0, alpha: 1.0)

                })
            }
        }
    }

    DispatchQueue.main.async { 
        if managedObject.date?.compare(Date()) != .orderedDescending {
         cell.detailTextLabel?.textColor = UIColor.red
        } else {
         cell.detailTextLabel?.textColor = UIColor.black
        }
    }

    return cell
}

由于

0 个答案:

没有答案