2015-04-14 3 views
2

В моем столе у ​​меня есть UITableViewRowAction для editActionsForRowAtIndexPath. Когда я нажму на него, он удалит все данные в моем массиве, в результате вы получите didSet в массиве, заканчивающемся изменением вида. Код выглядит следующим образом:UITableViewRowAction завершение после анимации

var data: [Int] = [Int]() { 
    didSet { 
     if data.isEmpty { 
      // change view 
     } 
    } 
} 

func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath: NSIndexPath) -> [AnyObject]? { 
    var confirm = UITableViewRowAction(style: .Default, title: "Confirm") { (action: UITableViewRowAction!, indexPath: NSIndexPath!) -> Void in 
     self.data.removeAll(keepCapacity: false) 
     self.tableView.setEditing(false, animated: true) 
    } 
    return [confirm] 
} 

То, что я хотел бы получить это своего рода завершение после анимации в UITableViewRowAction закончена (строка движется назад в это место), затем очистить массив и изменить взгляды , Если возможно, я бы хотел избежать ручной задержки.

ответ

3

Попробуйте этот код:

var data: [Int] = [Int]() { 
    didSet { 
     if data.isEmpty { 
      // change view 
     } 
    } 
} 

func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath: NSIndexPath) -> [AnyObject]? { 
    var confirm = UITableViewRowAction(style: .Default, title: "Confirm") { (action: UITableViewRowAction!, indexPath: NSIndexPath!) -> Void in 
     CATransaction.begin() 
     CATransaction.setCompletionBlock({ 
      self.data.removeAll(keepCapacity: false) 
     }) 
     self.tableView.setEditing(false, animated: true) 
     CATransaction.commit() 
    } 
    return [confirm] 
} 

Код в CATransaction.setCompletionBlock({/* completion code */}) запускается после того, как другой код между CATransaction.begin() и CATransaction.commit() заканчивает получение казнены. Итак, здесь self.data.removeAll(keepCapacity: false) должен быть вызван после завершения self.tableView.setEditing(false, animated: true).

Надеюсь, это поможет!

ПРИМЕЧАНИЕ: Я не тестировал этот код сам с tableView.setEditing(...), но я использовал его для tableView.deleteRowsAtIndexPaths(...).

Смежные вопросы