swift uitableview ios8 ios9 xcode7

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 { } }