2016-04-24 9 views
1

「編集」ボタンと「削除」ボタンを表示するために「セル上で左にスワイプ」機能を実装しましたが、セルのindexPathForCellを正しく渡すのに苦労しています。編集ボタンをタップしたセルからのデータをAdd/Editのフィールドにあらかじめ入力するのではなく、Add/Editセルビューを表示するだけです。それはセグエがリンクされているものなので、私はセル自体をタップした場合UITableViewセルのeditボタンの隣にあるeditボタンの機能editActionsForRowAtIndexPath

// swipe-left options for a cell (Edit, Delete) 
override func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath: NSIndexPath) -> [UITableViewRowAction]? { 
    let delete = UITableViewRowAction(style: .Destructive, title: "Delete") { (action, indexPath) in 
     // delete item at indexPath 
     self.items.removeAtIndex(indexPath.row) 
     tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade) 
    } 

    let edit = UITableViewRowAction(style: .Normal, title: "Edit") { (action, indexPath) in 
     // edit item at indexPath 
     self.performSegueWithIdentifier("EditItem", sender: self) 
    } 

    return [delete, edit] 
} 


// Prepare for Segue 
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if segue.identifier == "EditItem" { 
     let ItemDetailViewController = segue.destinationViewController as! AddItemController 

     // Get the cell that generated this segue. 
     if let selectedItemCell = sender as? ItemTableViewCell { 
      let indexPath = tableView.indexPathForCell(selectedItemCell)! 
      let selectedItem = item[indexPath.row] 
      ItemDetailViewController.item = selectedItem 
     } 
    } 
    else if segue.identifier == "AddItem" { 
     print("Adding new item.") 
    } 
} 

prepareForSegue機能が正常に動作します:

は、ここに私のItemTableViewControllerから該当するコードです。最終的に、私は別のビューに別のセグをトリガするためにセルをタップしたいので、実際にはこの実装の多く/ほとんどを取り除かなければならないようです。私は単に右クリックしてEdit cellボタンからドラッグするだけですが、ストーリーボードには表示されません。そのため、現在の実装では、 "tap-on-cell"アクションを避けていますが、 on-cell "segueを他の場所に移動するには、編集ボタンをどのようにして"このセルのindexPathを取得し、Add/Editビューに移動するか "ということについては全く迷っています。

答えて

1

self.performSegueWithIdentifier("EditItem", sender: self) あなたは自分自身を送信すべきではありませんが、あなたが受け取ったindexPathは、変更したいオブジェクトのindexPathです。

segueIdentifier EditItemのprepareForSegueでは、送信者がNSIndexPathであることがわかっているので、実際にはtableView.indexPathForCellを検索する必要はありません。

+0

返信いただきありがとうございます。 prepareForSegue関数のコードについてより具体的になりますか? – jspinella

+0

'もしsegue.identifier ==" EditItem "{ をItemDetailViewController = segue.destinationViewControllerにすると! AddItemController indexPath = senderを!にしましょう! NSIndexPath selectItem = item [indexPath.row] ItemDetailViewController.item = selectedItem } 'セルでテーピングするときに新しいセグを作成 – FredericP

+0

ありがとうございました!知らない人のために、ストーリーボードで物理的に右クリックできないUI要素にセグを追加する方法は次のとおりです。http://stackoverflow.com/questions/29294160/how-to-create -a-segue-in-associated-with-associated-ui-element(ViewController自体から目的の宛先にセグを追加するだけです) – jspinella