我可以成功地使用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) {
//???
}
答案 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
}
然后在您的操作方法中,请注意方法从AnyObject
到UIButton!
的更改,以便您可以访问代码属性。
@IBAction func favButtonDidTouch(sender: UIButton!) {
performSegueWithIdentifier("ArticleSegue", sender:NSIndexPath(forRow: sender.tag, inSection: 0))
}