应用程序关闭时从本地通知中选择表格视图单元格
Selecting tableview cell from local notification when app closed
我正在我的 iOS10
应用程序中实现本地通知。这是一个简单的主从应用程序,用户可以在其中输入带有有效期的物品(药品)。项目过期时会触发通知。
应用程序结构是一个 DrugTableViewController
和一个 DetailViewController
(包含药物对象数组药物)嵌入在导航控制器中。
我试图在用户点击通知时在 tableview
selected 中获取适当的行。
当应用程序打开或在后台运行时,下面的代码是成功的,但当收到通知时应用程序已关闭时,select行不成功(尽管它仍然正确加载表视图)。
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
// Pull out the buried userInfo dictionary
let userInfo = response.notification.request.content.userInfo
if let drugID = userInfo["drug"] as? String {
let navigationController = self.window?.rootViewController as! UINavigationController
let destinationViewController = navigationController.viewControllers[0] as! DrugTableViewController
navigationController.popToViewController(destinationViewController, animated: true)
var selectRow: Int? = nil
for drug in destinationViewController.drugs {
if drug.uniqueID == drugID {
selectRow = destinationViewController.drugs.index(of: drug)!
let path = IndexPath(row: selectRow!, section: 0)
destinationViewController.tableView.reloadData()
destinationViewController.tableView.selectRow(at: path, animated: true, scrollPosition: .top)
selectRow = nil
break
}
}
}
// Call completion handler
completionHandler()
}
我也试过从故事板 ID 实例化我的细节视图控制器,但这不起作用。
如有任何帮助,我们将不胜感激!
在加载 table 视图之前,可以调用此代码。首先尝试延迟通知处理一秒钟:
DispatchQueue.main.asyncAfter(deadline: .now() + 1, execute: {
//Your code here
})
看,它是否有帮助。如果愿意,想一想如何检查 tableview 是否已加载(或刚刚离开延迟)
我正在我的 iOS10
应用程序中实现本地通知。这是一个简单的主从应用程序,用户可以在其中输入带有有效期的物品(药品)。项目过期时会触发通知。
应用程序结构是一个 DrugTableViewController
和一个 DetailViewController
(包含药物对象数组药物)嵌入在导航控制器中。
我试图在用户点击通知时在 tableview
selected 中获取适当的行。
当应用程序打开或在后台运行时,下面的代码是成功的,但当收到通知时应用程序已关闭时,select行不成功(尽管它仍然正确加载表视图)。
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
// Pull out the buried userInfo dictionary
let userInfo = response.notification.request.content.userInfo
if let drugID = userInfo["drug"] as? String {
let navigationController = self.window?.rootViewController as! UINavigationController
let destinationViewController = navigationController.viewControllers[0] as! DrugTableViewController
navigationController.popToViewController(destinationViewController, animated: true)
var selectRow: Int? = nil
for drug in destinationViewController.drugs {
if drug.uniqueID == drugID {
selectRow = destinationViewController.drugs.index(of: drug)!
let path = IndexPath(row: selectRow!, section: 0)
destinationViewController.tableView.reloadData()
destinationViewController.tableView.selectRow(at: path, animated: true, scrollPosition: .top)
selectRow = nil
break
}
}
}
// Call completion handler
completionHandler()
}
我也试过从故事板 ID 实例化我的细节视图控制器,但这不起作用。
如有任何帮助,我们将不胜感激!
在加载 table 视图之前,可以调用此代码。首先尝试延迟通知处理一秒钟:
DispatchQueue.main.asyncAfter(deadline: .now() + 1, execute: {
//Your code here
})
看,它是否有帮助。如果愿意,想一想如何检查 tableview 是否已加载(或刚刚离开延迟)