闹钟应用程序,从 swift 中的 UItableView 中删除特定的本地通知
Alarm clock app, deleting a specific local notification from a UItableView in swift
我正在尝试使用 UILocalNotification 构建一个闹钟。我可以安排警报并将它们填充到 UITableView 中。通知警报工作正常,我可以轻松取消所有计划的通知。我的问题是:
- 如何从 table 中删除特定的本地通知?
如何防止通知在被解雇后从 table 消失,就像苹果闹钟被解雇后停电时一样。
func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
if (editingStyle == UITableViewCellEditingStyle.Delete) {
var notificationArray:NSArray = UIApplication.sharedApplication().scheduledLocalNotifications
var notification:UILocalNotification = notificationArray.objectAtIndex(indexPath.row) as UILocalNotification
UIApplication.sharedApplication().cancelLocalNotification(notification)
alarmTable.reloadData()
}
}
如果要删除一行,请使用
tableView.beginUpdates()
tableView.deleteRowsAtIndexPaths([ indexPathRowToDelete ], withRowAnimation: UITableViewRowAnimation.Fade)
tableViewMain.endUpdates()
您不需要使用 reloadData
,因为函数会处理这个。
但是,如果您想使某个条目处于非活动状态,例如不删除它,为每个数据条目使用一个变量,显示它是否处于活动状态。检查 cellForRowAtIndexPath
方法中的标志。然后您可以相应地设置标志并调用 reloadRowsAtIndexPaths
.
旁注:访问 UIApplication.sharedApplication()
来检索数据并不是一个好主意。最好将数据传递给 table 视图的数据源。
我找到了解决问题的方法。据我了解,在删除本地通知并重新加载 table 时,它会崩溃,因为它假定已删除通知的行仍然存在。所以我所做的是我添加了一个命令来删除删除本地通知命令下的行。这解决了我的问题。
我正在尝试使用 UILocalNotification 构建一个闹钟。我可以安排警报并将它们填充到 UITableView 中。通知警报工作正常,我可以轻松取消所有计划的通知。我的问题是:
- 如何从 table 中删除特定的本地通知?
如何防止通知在被解雇后从 table 消失,就像苹果闹钟被解雇后停电时一样。
func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) { if (editingStyle == UITableViewCellEditingStyle.Delete) { var notificationArray:NSArray = UIApplication.sharedApplication().scheduledLocalNotifications var notification:UILocalNotification = notificationArray.objectAtIndex(indexPath.row) as UILocalNotification UIApplication.sharedApplication().cancelLocalNotification(notification) alarmTable.reloadData() } }
如果要删除一行,请使用
tableView.beginUpdates()
tableView.deleteRowsAtIndexPaths([ indexPathRowToDelete ], withRowAnimation: UITableViewRowAnimation.Fade)
tableViewMain.endUpdates()
您不需要使用 reloadData
,因为函数会处理这个。
但是,如果您想使某个条目处于非活动状态,例如不删除它,为每个数据条目使用一个变量,显示它是否处于活动状态。检查 cellForRowAtIndexPath
方法中的标志。然后您可以相应地设置标志并调用 reloadRowsAtIndexPaths
.
旁注:访问 UIApplication.sharedApplication()
来检索数据并不是一个好主意。最好将数据传递给 table 视图的数据源。
我找到了解决问题的方法。据我了解,在删除本地通知并重新加载 table 时,它会崩溃,因为它假定已删除通知的行仍然存在。所以我所做的是我添加了一个命令来删除删除本地通知命令下的行。这解决了我的问题。