在tableview选项中获取行ID

时间:2015-05-06 10:41:41

标签: ios swift

我正在为tableview单元格选项使用滑动手势。

这是我的代码:

func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath: NSIndexPath) -> [AnyObject]? {

    var shareAction = UITableViewRowAction(style: UITableViewRowActionStyle.Default, title: "Sil" , handler: { (action:UITableViewRowAction!, indexPath:NSIndexPath!) -> Void in


        let shareMenu = UIAlertController(title: nil, message: "Emin misiniz ?", preferredStyle: .ActionSheet)

        let twitterAction = UIAlertAction(title: "Sil", style: UIAlertActionStyle.Default, handler: self.deleteConversation)
        let cancelAction = UIAlertAction(title: "İptal", style: UIAlertActionStyle.Cancel, handler: nil)

        shareMenu.addAction(twitterAction)
        shareMenu.addAction(cancelAction)


        self.presentViewController(shareMenu, animated: true, completion: nil)
    })
    return [shareAction]

}

你可以在代码中看到,我正在使用deleteConversation方法处理程序。但我不知道如何在deleteConversation方法中获取行ID。

这是我的deleteConversation方法:

func deleteConversation(alert: UIAlertAction!) {
    //I need the row id here
    println("sill")
}

如何在处理程序方法中获取行ID?

3 个答案:

答案 0 :(得分:1)

Class YourClassNameHere

var cellIndexPath: NSIndexPath?

// Other stuff here...

func tableView(tableView: UITableView, editActionsForRowAtIndexPath   indexPath: NSIndexPath) -> [AnyObject]? {

cellIndexPath = indexPath

var shareAction = UITableViewRowAction(style: UITableViewRowActionStyle.Default, title: "Sil" , handler: { (action:UITableViewRowAction!, indexPath:NSIndexPath!) -> Void in


    let shareMenu = UIAlertController(title: nil, message: "Emin misiniz ?", preferredStyle: .ActionSheet)

    let twitterAction = UIAlertAction(title: "Sil", style: UIAlertActionStyle.Default, handler: self.deleteConversation)
    let cancelAction = UIAlertAction(title: "İptal", style: UIAlertActionStyle.Cancel, handler: nil)

    shareMenu.addAction(twitterAction)
    shareMenu.addAction(cancelAction)


    self.presentViewController(shareMenu, animated: true, completion: nil)
})
return [shareAction]

}

func deleteConversation(alert: UIAlertAction!) {
  //Print row indexpath here
  println("sill \(cellIndexPath.row)")
}

答案 1 :(得分:1)

你有几个选择。您可以将edit操作的row / indexPath保存到editActionsForRowAtIndexPath开头的新实例变量中,然后在deleteConversation函数中查看该实例变量。 (您需要在视图控制器中创建一个新的类范围的实例变量,以使此选项起作用。)

第二个选项:您可以在通话中传入内联块以创建Twitter操作:

func tableView(tableView: UITableView, 
  editActionsForRowAtIndexPath   
  indexPath: NSIndexPath) -> [AnyObject]? 
{
  //skipped code here...
  let twitterAction = UIAlertAction(
    title: "Sil", 
    style: UIAlertActionStyle.Default, 
    handler: 
    {
      (alert: UIAlertAction!)  in
      println("User asked to delete twitter feed at index \(indexPath.row)")
    })
  //skipped more code here...
}

使用该语法,您将作为twitter动作处理程序传递一个闭包,并在线定义闭包。当你这样做时,闭包可以访问其封闭范围内的变量。在这种情况下,它允许我们访问传入的indexPath。

答案 2 :(得分:0)

我假设ID你的意思是indexPath? 为了获得它,您是否尝试在indexPathForSelectedRow上使用self.tableView