如何通过tableViewDelegate

时间:2015-08-03 13:24:05

标签: swift delegates protocols 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]
        }
    }
}

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

2 个答案:

答案 0 :(得分:2)

angular.module('app', []) .controller("FirstCtrl", ['$rootScope', '$scope', 'myservice', function ($rootScope, $scope, myservice) { this.message = "First Cntrl"; this.myservice = myservice; } ]).controller("SecondCtrl", ['$rootScope', '$scope', 'myservice', function ($rootScope, $scope, myservice) { this.message = "Second Cntrl"; this.myservice = myservice; } ]) .service('myservice', function () { return { message: 'Cntrl' }; }); 方法调用didSelectRowAtIndexPath上,并将performSegueWithIdentifier作为发件人传递。

然后在indexPath中,您可以执行prepareForSegue并设置您的控制器。

答案 1 :(得分:-1)

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

现在假设您想要点击单元格0 时从 T 转到 A ,然后从开始单击单元格1 时, B

第1步:将segue从 T连接到A 并命名为segue" segueToA"
第2步:将segue从 T连接到B 并命名为segue" segueToB"
第3步: T 中获得didSelectRowAtIndexPath并放入if-else

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

那就是它。

更新:这是Sample Project.