如何通过tableViewDelegate创建segue



我想创建一个从tableViewDelegate单元格到另一个视图的segue。这是我的代码:

import UIKit
class CoriViewController: UIViewController, UITableViewDelegate, UITableViewDataSource
{
    @IBOutlet var tableView: UITableView!
var elencoCori : SquadraModel! //This var contains label and array
override func viewDidLoad()
{
    super.viewDidLoad()
    self.tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cell")
    InterfaceManager.sharedInstance.putBlurBackgroundToTableView(self.view, tableView: self.tableView)
    self.tableView.tableFooterView = UIView(frame:CGRectZero)
    self.tableView.backgroundColor = UIColor.clearColor()
}
override func didReceiveMemoryWarning()
{
    super.didReceiveMemoryWarning()
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
    return self.elencoCori.cori.count
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
{
    let cell : UITableViewCell = self.tableView.dequeueReusableCellWithIdentifier("cell") as! UITableViewCell
    let coro = elencoCori.cori[indexPath.row]
    cell.textLabel?.text = coro.marker
    cell.backgroundColor = UIColor.clearColor()
    cell.accessoryType = UITableViewCellAccessoryType.DisclosureIndicator
    return cell
}
func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath)
{
    self.performSegueWithIdentifier("toDettaglioController", sender: self)
        tableView.deselectRowAtIndexPath(indexPath, animated: true)
    }
}

现在的问题是:我如何设置一个发送到secondView的prepareForSegue ?在其他情况下,我会像这样解决问题:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?)
{
    if segue.identifier == "toDettaglioController"
    {
        if let indexPath = tableView.indexPathForSelectedRow()
        {
            let controller = segue.destinationViewController as! Dettaglio controller
            controller.coro = elencoCori.cori[indexPath.row]
        }
    }
}

但是我知道这个不起作用,我必须使用委托方法。每个人都能帮我一步一步的指导吗?

在您的didSelectRowAtIndexPath方法上调用performSegueWithIdentifier并传递indexPath作为您的发送者。

然后在prepareForSegue你可以做if let indexPath = sender as NSIndexPath和设置你的控制器

假设你有一个UITableViewController-T和两个uiviewcontroller -A和B

现在假设您想在单击单元格0时从T转到A,在单击单元格1时从T转到B

步骤1:将segue从T连接到A并将该segue命名为"segueToA"
步骤2:连接从T到B的segue 并将该segue命名为"segueToB"
step3:didSelectRowAtIndexPath放到T,把if-else放到

if(indexPath.row == 0){
    self.performSegueWithIdentifier("segueToA", sender: nil)
}else{
   self. performSegueWithIdentifier("segueToB", sender: nil)
}

Update: Here is a Sample Project.

最新更新