2016-04-07 11 views
1

UITableViewController.swiftとUITableViewCell.swiftを使用してCoreDataを使用してアプリケーションを構築しています。TableViewCellでスワイプした後でTableViewControllerの行を削除する

UITableViewCell.swiftでUIPanGestureRecognizerを使用してClear To-doアプリのように行を削除しようとしています。行を左右にパンすることはできますが、選択した行のindexPathを取得し、すべてのデータが格納されているUITableViewController.swiftで削除する方法がわかりません。

EduDicTableViewCell.swift:読書のための

override func awakeFromNib() { 
    super.awakeFromNib() 

    let recognizer = UIPanGestureRecognizer(target: self, action: #selector(EduDicTableViewCell.handlePan(_:))) 

    recognizer.delegate = self 
    addGestureRecognizer(recognizer) 
} 

//MARK: - horizontal pan gesture methods 
func handlePan(recognizer: UIPanGestureRecognizer) { 
    // 1 
    if recognizer.state == .Began { 
     // when the gesture begins, record the current center location 
     originalCenter = center 
    } 
    // 2 
    if recognizer.state == .Changed { 
     let translation = recognizer.translationInView(self) 
     center = CGPointMake(originalCenter.x + translation.x, originalCenter.y) 
     // has the user dragged the item far enough to initiate a delete/complete? 
     deleteOnDragRelease = frame.origin.x < -frame.size.width/2.0 
    } 
    // 3 
    if recognizer.state == .Ended { 
     let originalFrame = CGRect(x: 0, y: frame.origin.y, 
            width: bounds.size.width, height: bounds.size.height) 
     if deleteOnDragRelease { 
      print("send it") 



     } else { 
      UIView.animateWithDuration(0.2, animations: {self.frame = originalFrame}) 
      print("Bounced Back") 
     } 
    } 
} 

ありがとう!その後、

protocol EduDicTableViewCellDelegate { 
    func didSwipeDelete(cell: UITableViewCell) 
} 

とANを追加します。

答えて

1

あなたはテーブルビューコントローラに、適切なメソッドを呼び出すカスタムセルでデリゲート/プロトコルを使用することができます。

セルにプロトコル定義を追加します。このプロトコルで(オプション)delegate変数:handlePan方法において

var delegate : EduDicTableViewCellDelegate? = nil 

、デリゲートメソッドを呼び出すために行を追加するときパンが解除されます。didSwipeDelete方法はself渡し

if deleteOnDragRelease { 
    print("send it") 
    self.delegate?.didSwipeDelete(self) 
} else ... 

注こと - スワイプされたセルを。テーブルビューコントローラで

、(indexPathがスワイプたセルに対応得るためのtableViewのindexPathForCell方法を使用して)セルを削除するためのメソッドを追加:

func didSwipeDelete(cell: UITableViewCell) { 
    if let indexPath = self.tableView.indexPathForCell(cell) { 
     print("didSwipeDelete \(indexPath.section) - \(indexPath.row)") 
     // remove the object at this indexPath from the data source 
     // and delete the corresponding table view row 
     ... 
    } 
} 

は、テーブルのクラス定義を改正

class CustomTableViewController: UITableViewController, EduDicTableViewCellDelegate { 
    ... 
} 

最後に、cellForRowAtIndexPath方法では、self(表VIに細胞にdelegate変数を設定します。それはプロトコルを採用していることを示すためにビューコントローラewコントローラ):

cell.delegate = self 
+0

完璧でした!ありがとうございます! –

+0

優れています。ありがとうございました! – Ibrahim