swift - editActionsForRowAtIndexPath no se ejecuta en iOS 8 con Xcode 7
uitableview ios8 (3)
En iOS 8, las acciones de edición solo se habilitan si se implementa la llamada commitEditingStyle en su delegado. Agregue el método de abajo en su tableViewController:
- (void)tableView:(UITableView*)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath*)indexPath
{
// All tasks are handled by blocks defined in editActionsForRowAtIndexPath, however iOS8 requires this method to enable editing
}
Estoy probando mi aplicación en 3 dispositivos. 2 dispositivos en iOS 9 y un dispositivo en iOS 8. En iOS 9, la función editActionsForRowAtIndexPath
está funcionando y la acción se muestra cuando deslizo una celda. Pero en iOS 8, no puedo deslizar las celdas.
Aquí está mi código:
func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath: NSIndexPath) -> [UITableViewRowAction]? {
let ShareAction = UITableViewRowAction(style: .Normal, title: "Partager", handler: { (action: UITableViewRowAction!, indexPath: NSIndexPath!) -> Void in
if AllArticle[indexPath.row].Title != nil && AllArticle[indexPath.row].Link != nil {
var ToShare = []
if self.search {
ToShare = [ArticleFiltered[indexPath.row].Link!]
} else {
ToShare = [AllArticle[indexPath.row].Link!]
}
let ActivityViewController = UIActivityViewController(activityItems: ToShare as [AnyObject], applicationActivities: nil)
self.presentViewController(ActivityViewController, animated: true, completion: {
self.TableView.setEditing(false, animated: true)
})
}
})
let FavoriteAction = UITableViewRowAction(style: .Normal, title: "Ajouté aux favoris", handler: { (action: UITableViewRowAction!, indexPath: NSIndexPath!) -> Void in
if AllArticle[indexPath.row].Favoris {
let alreadyInView = UIAlertController(title: "Favori déjà ajouté", message: "Cet article fait déjà parti de vos favoris", preferredStyle: .Alert)
let ActionAlert = UIAlertAction(title: "Ok", style: .Default) { (action) in }
alreadyInView.addAction(ActionAlert)
self.presentViewController(alreadyInView, animated: true, completion: nil)
} else {
AllArticle[indexPath.row].Favoris = true
let alreadyInView = UIAlertController(title: "Favori ajouté", message: "Cet article fait maintenant parti de vos favoris", preferredStyle: .Alert)
let ActionAlert = UIAlertAction(title: "Ok", style: .Default) { (action) in }
alreadyInView.addAction(ActionAlert)
self.presentViewController(alreadyInView, animated: true, completion: nil)
Favorite.append(indexPath.row)
saveFavoris()
}
self.TableView.setEditing(false, animated: true)
})
FavoriteAction.backgroundColor = UIColor.redColor()
return [ShareAction, FavoriteAction]
}
Y, por supuesto, agregué
ViewDidLoad ()
if TableView != nil {
TableView.delegate = self
TableView.dataSource = self
TableView.tableFooterView = UIView(frame: CGRectZero)
TableView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: "tapTableView"))
TableView.gestureRecognizers?.last?.delegate = self
}
¿Puede su error Xcode? Algunas ideas ?
Gracias !
Si tiene UITableViewCell
personalizado, y tiene un GestureRecognizer
, verifique los métodos delegados - shouldRecognizeSimultaneouslyWithGestureRecognizer:
Agregue este método de delegado a la clase.
func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
if editingStyle == UITableViewCellEditingStyle.Delete {
}
}