如何通过 tableViewDelegate 进行转场
How to make a segue by a tableViewDelegate
我想创建一个从 tableViewDelegate 单元格到另一个视图的转场。这是我的代码:
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 步: 将 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.
我想创建一个从 tableViewDelegate 单元格到另一个视图的转场。这是我的代码:
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 步: 将 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.