我有一个类似的问题,并发现您的问题正在寻找答案。由于这里没有答案,我认为我必须自己弄清楚。这是我的问题以及我如何解决它。我希望它对你有用,因为我解决它非常简单。
我有一个带有开始屏幕的应用程序,它显示了一个包含多个曲目的表格。当您选择一个轨迹时,您可以显示轨迹详细信息、在地图上显示轨迹(使用 MapView)或删除轨迹。
但是,当您第一次使用该应用程序时,表格是空的,并显示一个表格单元格:“没有保存的曲目”。
这意味着表格是空的,您无法显示赛道详情、赛道地图或删除赛道。我想确保如果桌子是空的,你会收到一条不同的消息,并且左滑动被撤消。
代码是 funk -tableView:editActionsForRowAtIndexPath indexPath:
override func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath: NSIndexPath) -> [UITableViewRowAction]? {
let selectedRow = indexPath.row
guard self.savedTracks.count > 0 else {
//There are no saved tracks, the action cannot be executed.
let faultAction = UITableViewRowAction(style: .Normal, title: "No tracks", handler: { (action, indexPath) -> Void in
self.trackOverviewTable.reloadData() //Simply reload the table view after the action button is hit.
})
return [faultAction]
}
//Show track details
let detailsAction = UITableViewRowAction(style: .Default, title: "Details") { (action, indexPath) -> Void in
print("I now selected the track details view.\n")
self.newTrack = self.savedTracks[selectedRow]
self.performSegueWithIdentifier("showTrackDetails", sender: self)
}
//Show track map
let mapAction = UITableViewRowAction(style: .Normal, title: "Map") { (action, indexPath) -> Void in
print("I now selexted the track map view.\n")
self.newTrack = self.savedTracks[selectedRow]
self.performSegueWithIdentifier("showTrackMap", sender: self)
}
//Delete the selected track
let deleteAction = UITableViewRowAction(style: .Default, title: "Delete") { (action, indexPath) -> Void in
print("I now pressed the delete button.\n")
self.savedTracks.removeAtIndex(selectedRow)
if self.savedTracks.count > 0 {
self.trackOverviewTable.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
} else {
self.trackOverviewTable.reloadData()
}
}
detailsAction.backgroundColor = UIColor(colorLiteralRed: 21.0/255.0, green: 175.0/255.0, blue: 253.0/255.0, alpha: 0.8)
mapAction.backgroundColor = UIColor(colorLiteralRed: 37.0/255.0, green: 155.0/255.0, blue: 253.0/255.0, alpha: 0.8)
return [deleteAction, mapAction, detailsAction]
}
这里的重要部分是“guard else”语句,当没有保存轨道时执行代码。基本上,swipi 显示不同的消息“无曲目”,当单击此操作按钮时,将重新加载表格并撤消滑动。由于您使用 UIAlertController,因此适用相同的原则。上述方法与 UIAlertController 几乎完全相同,您也可以在用户选择“取消”按钮后重新加载表。
正如我所说,它非常简单,可能无法满足您的期望,但它确实会在用户单击“取消”后取消您的左滑动。我希望它对你有用。