Swift - IBACTION如何执行segue

时间:2015-07-13 08:56:03

标签: ios swift tableview segue

我可以成功地使用DidSelectRowAtIndexPath将数据(authorID)传递给视图。 现在我尝试使用Button IBACTION执行相同的segue,但我找不到执行它的方法。我找不到在INACTION中使用NSIndexPath的方法。

 override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
       performSegueWithIdentifier("ArticleSegue", sender: indexPath) 
       tableView.deselectRowAtIndexPath(indexPath, animated: true)
 }

 override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if segue.identifier == "ArticleSegue"{
            let toView = segue.destinationViewController as! ArticleTableViewController
            let indexPath = sender as! NSIndexPath
            let authorid = articleList?[indexPath.row]["author_id"].int!
            toView.authorid = authorid            
}

@IBAction func favButtonDidTouch(sender: AnyObject) {
 //???
}

4 个答案:

答案 0 :(得分:1)

如果您已将segue定义为两个视图控制器之间的手动segue,则只需调用

即可
performSegueWithIdentifier("ManualSegue", sender: self)

另一种可能性是您将segue从按钮本身定义到目标视图控制器。在这种情况下,它会自动发生;您既不需要IBAction也不需要致电performSegueWithIdentifier

答案 1 :(得分:1)

你可以解决它的一种方法,因为你只需要单元格的行(这里是你的articleList的indexPath.row),就是给你的favButtons一个标签(如果你没有使用UIView标签的话) )。

这意味着当您在tableView:cellForRowAtIndexPath:中配置单元格时,您只需说:

cell.favButton.tag = indexPath.row

然后在您的IBAction中,使用该标记创建一个NSIndexPath并调用segue:

let indexPath = NSIndexPath(forRow: sender.tag, inSection: 0)
self.performSegueWithIdentifier("ManualSegue", sender: indexPath)

确保此案例中的发件人是UIView(此处为UIButton)。

答案 2 :(得分:0)

有一种方法

performSegueWithIdentifier("ArticleSegue", sender:self)

答案 3 :(得分:0)

Row分配给

UIButton的代码
override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
    // Setup cell etc..
    ....
    cell.favButton.tag = indexPath.row
    ...
    return cell
}

然后在您的操作方法中,请注意方法从AnyObjectUIButton!的更改,以便您可以访问代码属性。

@IBAction func favButtonDidTouch(sender: UIButton!) {
  performSegueWithIdentifier("ArticleSegue", sender:NSIndexPath(forRow: sender.tag, inSection: 0))
}