2016-05-16 96 views
0

我有一个编辑按钮,在导航栏这已被重写,以显示选项,而是完成了编辑,并完成一个tableviewcontroller ..定制EditAction按钮不触发事件

在我的viewDidLoad函数我有。 ..

// Display an Edit button in the navigation bar for this view controller. 
    self.navigationItem.leftBarButtonItem = self.editButtonItem() 
    // change initial text from Edit to Options 
    self.navigationItem.leftBarButtonItem!.title = "Options" 

我也有以下...

override func setEditing (editing:Bool, animated:Bool) 
{ 
    //set different text for Edit and Done 
    super.setEditing(editing,animated:animated) 
    if(self.editing) 
    { 
     self.editButtonItem().title = "Done" 
    }else 
    { 
     self.editButtonItem().title = "Options" 
    } 
} 

为了完整,这是我的编辑动作代码。

// Override to support editing the table view. 
override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) { 

    switch editingStyle { 

    case .Delete: 
     let context = fetchedResultsController.managedObjectContext 
     if indexPath.row == 0 { 
      //this is the top (first row) 
      // Deleting without warning 
      let indexPathToDelete = NSIndexPath(forRow: 0, inSection: 0) 
      let objectToDelete = fetchedResultsController.objectAtIndexPath(indexPathToDelete) as! NSManagedObject 
      context.deleteObject(objectToDelete) 

      do { 
       try context.save() 
      } catch { 
       print(error) 
      } 

     } else { 
      //we are deleted a row that is not the top row 
      // we need to give a warning and if acknowledged then delele all rows from the selected row and all rows above it 

      let alertController = UIAlertController(title: nil, message: "Are you sure? This will remove this and all logs above it.", preferredStyle: .Alert) 
      let cancelAction = UIAlertAction(title: "Cancel", style: .Cancel) { (action) in 

      } 
      alertController.addAction(cancelAction) 
      let deleteAction = UIAlertAction(title: "Delete", style: .Default) { (action) in 

       for deleteindex in 0 ... indexPath.row { 
        let deleteIndexPath = NSIndexPath(forRow: deleteindex, inSection: 0) 
        let objectToDelete = self.fetchedResultsController.objectAtIndexPath(deleteIndexPath) as! NSManagedObject 
        context.deleteObject(objectToDelete) 
       } 

       do { 
        try context.save() 

       } catch { 
        print(error) 
       } 
      } 
      alertController.addAction(deleteAction) 

      // Dispatch on the main thread 
      dispatch_async(dispatch_get_main_queue()) { 
       self.presentViewController(alertController, animated: true, completion:nil) 
      } 

     } 
     break; 

    default : 
     return 
    } 

} 

这工作得很好......

现在,现在我已经添加了自定义编辑行为......平时删除+出口通过将此代码...

//Override edit actions 
override func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath: NSIndexPath) -> [UITableViewRowAction]? { 

    let delete = UITableViewRowAction(style: .Destructive, title: "Delete") { (action, indexPath) in 
     // delete item at indexPath 
    } 

    let export = UITableViewRowAction(style: .Normal, title: "Export") { (action, indexPath) in 
     // export item at indexPath 
    } 

    export.backgroundColor = UIColor.blueColor() 

    return [delete, export] 
} 

现在当处于编辑模式时,每个单元格现在有两个选项“导出”和“删除”,但在按下时不会执行任

我有一个断点在行case。删除,但它没有被击中。

回答

1

你将不得不把你删除的代码到它的行动:

// Override edit actions 
override func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath: NSIndexPath) -> [UITableViewRowAction]? { 

    let delete = UITableViewRowAction(style: .Destructive, title: "Delete") { (action, indexPath) in 
     // You code for Deletion here... 

    } 
+0

信不信由你,因为我是构建这一闪念的问题...所以我并不需要覆盖FUNC的tableView(的tableView :UITableView,commitEditingStyle editingStyle:UITableViewCellEditingStyle,forRowAtIndexPath indexPath:NSIndexPath){}了吗? – Mych

+0

的权利,你会留下它空的移动删除代码到“删除”行动块 – cubycode