Swift prepareForSegue 到许多自定义 ViewController 之一
Swift prepareForSegue to one of many custom ViewControllers
我有一个 BaseViewController 使用带有标识符的 segues 连接到 3 个不同的自定义 ViewController。 BaseViewController 有一个 tableview,并且基于 tableviewCell 中的数据,BaseViewController 决定将哪个 segue 带到 3 个自定义 DestinationViewControllers 之一。
我还需要将一些数据传递给 DestinationViewController。
我正在尝试使用 prepareForSegue 或 performSegueWithIdentifier。
prepareForSegue 允许我使用 UIStoryboardSegue 设置目标视图控制器并向其传递数据。但是,它不允许我指定我想调用的 segue 标识符。案例 0 和案例 1 使用两个不同的 ViewControllers。
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
switch testVar{
case 0:
let svc = segue.destinationViewController as! CustomTableViewController1
svc.name = myName
break;
case 1:
let svc = segue.destinationViewController as! CustomTableViewController2
svc.name = myName1
break;
default:
break
}
}
performSegueWithIdentifier 允许我指定 segue 标识符,但它不允许我指定我想调用的 3 个自定义 DestinationViewControllers 中的哪一个,也没有给我一个很好的传递方式我需要传递的数据。
func tableView(tableView: UITableView, willSelectRowAtIndexPath indexPath: NSIndexPath) -> NSIndexPath? {
switch testVar {
case 0:
performSegueWithIdentifier("destination1", sender:self )
break;
case 1: //Submitted
performSegueWithIdentifier("destination1", sender: self)
break;
default:
break
}
return indexPath
}
你们能提出一些解决方案吗?提前致谢!
您必须同时使用 performSegue 和 prepareforsegue
func tableView(tableView: UITableView, willSelectRowAtIndexPath indexPath: NSIndexPath) -> NSIndexPath? {
switch testVar {
case 0:
performSegueWithIdentifier("destination1", sender:self )
break;
case 1: //Submitted
performSegueWithIdentifier("destination1", sender: self)
break;
default:
break
}
return indexPath
}
并且在您的 prepareForSegue 中实现如下:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "destination1" {
if let svc = segue.destinationViewController as? CustomTableViewController1 {
svc.name = myName
}
} else if segue.identifier == "destination2" {
if let svc = segue.destinationViewController as? CustomTableViewController2 {
svc.name = myName1
}
}
}
如果需要,也可以使用 didSelectRow 而不是 willSelectRow
我有一个 BaseViewController 使用带有标识符的 segues 连接到 3 个不同的自定义 ViewController。 BaseViewController 有一个 tableview,并且基于 tableviewCell 中的数据,BaseViewController 决定将哪个 segue 带到 3 个自定义 DestinationViewControllers 之一。
我还需要将一些数据传递给 DestinationViewController。
我正在尝试使用 prepareForSegue 或 performSegueWithIdentifier。
prepareForSegue 允许我使用 UIStoryboardSegue 设置目标视图控制器并向其传递数据。但是,它不允许我指定我想调用的 segue 标识符。案例 0 和案例 1 使用两个不同的 ViewControllers。
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { switch testVar{ case 0: let svc = segue.destinationViewController as! CustomTableViewController1 svc.name = myName break; case 1: let svc = segue.destinationViewController as! CustomTableViewController2 svc.name = myName1 break; default: break } }
performSegueWithIdentifier 允许我指定 segue 标识符,但它不允许我指定我想调用的 3 个自定义 DestinationViewControllers 中的哪一个,也没有给我一个很好的传递方式我需要传递的数据。
func tableView(tableView: UITableView, willSelectRowAtIndexPath indexPath: NSIndexPath) -> NSIndexPath? { switch testVar { case 0: performSegueWithIdentifier("destination1", sender:self ) break; case 1: //Submitted performSegueWithIdentifier("destination1", sender: self) break; default: break } return indexPath }
你们能提出一些解决方案吗?提前致谢!
您必须同时使用 performSegue 和 prepareforsegue
func tableView(tableView: UITableView, willSelectRowAtIndexPath indexPath: NSIndexPath) -> NSIndexPath? {
switch testVar {
case 0:
performSegueWithIdentifier("destination1", sender:self )
break;
case 1: //Submitted
performSegueWithIdentifier("destination1", sender: self)
break;
default:
break
}
return indexPath
}
并且在您的 prepareForSegue 中实现如下:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "destination1" {
if let svc = segue.destinationViewController as? CustomTableViewController1 {
svc.name = myName
}
} else if segue.identifier == "destination2" {
if let svc = segue.destinationViewController as? CustomTableViewController2 {
svc.name = myName1
}
}
}
如果需要,也可以使用 didSelectRow 而不是 willSelectRow