按钮Segue在自定义UITableViewCell中

时间:2016-01-13 07:11:41

标签: ios iphone swift uitableview segue

我有一个自定义UITableViewCell,里面有一个按钮,可以将数据转换为另一个viewController。这是利用

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    //cell setup code

    cell.button.tag = indexPath.row
    cell.button.addTarget(self, action: "editRow", forControlEvents: .TouchUpInside)

    return cell
}

然后使用函数

func editRow() {
    self.performSegueWithIdentifier("editRow", sender: self)
}

editRow segue是一个故事板segue。

问题...它不是执行segue并传递数据,而是触发segue两次,并且不会将任何数据传输到“SLEdit”viewController。关于为什么会发生这种情况的任何想法?请记住,由于开始学习swift,我对objective-c不是很熟悉。如果您需要任何进一步的信息或更多代码,请告诉我们。谢谢!

编辑:

 override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {

    if segue.identifier == "editRow" {

        let cell = sender as! SLTableViewCell
        let indexPath = tableView.indexPathForCell(cell)
        let SListController:SLEdit = segue.destinationViewController as! SLEdit
        let items:SList = frc.objectAtIndexPath(indexPath!) as! SList
        SListController.item = items
    }
}

1 个答案:

答案 0 :(得分:3)

这是因为您已经在故事板编辑器中进行了segue操作,并且您通过为按钮指定自定义操作再次调用相同的segue。

要将数据传递给下一个视图控制器,请使用以下方法:

override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!){
    if segue.identifier == "segueIdentifier" {

    }
}

修改1:

错误:" Could not cast value of type UIButton"是由于这一行:

let cell = sender as! SLTableViewCell

此处为发件人UIButton,您正在转换/分配(以适用者为准)适用于TableViewCell

编辑3:

用以下代码替换您的代码:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!{

    if segue.identifier == "editRow" {
        let button = sender as! UIButton
        let view = button.superview!
        let cell = view.superview as! <Your custom cell name here>

        let indexPath = itemTable.indexPathForCell(cell)

        let SListController:SLEdit = segue.destinationViewController as! SLEdit
        let items:SList = frc.objectAtIndexPath(indexPath) as! SList
        SListController.item = items
    }
}
相关问题