我正面临错误消息:
"UIStoryboardSegue does not have a member named 'identifier'"
这是导致错误的代码
if (segue.identifier == "Load View") {
// pass data to next view
}
在Obj-C上使用这样很好:
if ([segue.identifier isEqualToString:@"Load View"]) {
// pass data to next view
}
我做错了什么?
答案 0 :(得分:94)
这似乎是由UITableViewController
子类模板中的问题引起的。它附带了prepareForSegue
方法的一个版本,需要您打开segue。
将当前prepareForSegue
功能替换为:
override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) {
if (segue.identifier == "Load View") {
// pass data to next view
}
}
这个版本隐含地展开参数,所以你应该没问题。
答案 1 :(得分:36)
我认为问题是你必须使用!解开标识符
我有
override func prepareForSegue(segue: UIStoryboardSegue?, sender: AnyObject?) {
if segue!.identifier == "Details" {
let viewController:ViewController = segue!.destinationViewController as ViewController
let indexPath = self.tableView.indexPathForSelectedRow()
viewController.pinCode = self.exams[indexPath.row]
}
}
我的理解是没有!你得到一个真或假的价值
答案 2 :(得分:35)
Swift 4,Swift 3
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "MySegueId" {
if let nextViewController = segue.destination as? NextViewController {
nextViewController.valueOfxyz = "XYZ" //Or pass any values
nextViewController.valueOf123 = 123
}
}
}
答案 3 :(得分:10)
Swift 1.2
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
if (segue.identifier == "ShowDeal") {
if let viewController: DealLandingViewController = segue.destinationViewController as? DealLandingViewController {
viewController.dealEntry = deal
}
}
}
答案 4 :(得分:10)
对于Swift 2.3,swift3和swift4:
在didSelectRowAtindexPath创建一个执行Segue
对于Ex:
self.performSegue(withIdentifier: "uiView", sender: self)
之后创建一个prepareforSegue函数来捕获Destination segue并传递值:
例如:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "uiView"{
let destView = segue.destination as! WebViewController
let indexpath = self.newsTableView.indexPathForSelectedRow
let indexurl = tableDatalist[(indexpath?.row)!].link
destView.UrlRec = indexurl
//let url =
}
}
您需要在Destination ViewController
中创建名为UrlRec的变量答案 5 :(得分:2)
在Swift 4.2和Swift 5中为Segue做准备。
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if (segue.identifier == "OrderVC") {
// pass data to next view
let viewController = segue.destination as? MyOrderDetailsVC
viewController!.OrderData = self.MyorderArray[selectedIndex]
}
}
如何在特定事件上调用segue(如单击按钮等):
performSegue(withIdentifier: "OrderVC", sender: self)
答案 6 :(得分:1)
这是您可以使用此功能的方法之一,当您想要访问另一个类的变量并根据该变量更改输出时。
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let something = segue.destination as! someViewController
something.aVariable = anotherVariable
}
答案 7 :(得分:0)
如果您没有使用具有不同标识符的相同目标视图控制器,则代码可以比其他解决方案更简洁(并避免在其他一些答案中使用as!
):
override func prepare(for segue: NSStoryboardSegue, sender: Any?) {
if let myViewController = segue.destinationController as? MyViewController {
// Set up the VC
}
}
答案 8 :(得分:-1)
在带有id的部分的右侧面板中更改segue标识符。用于匹配条件中使用的字符串的图标。
答案 9 :(得分:-3)
override func prepareForSegue(segue: UIStoryboardSegue?, sender: AnyObject?) {
if(segue!.identifier){
var name = segue!.identifier;
if (name.compare("Load View") == 0){
}
}
}
您无法将标识符与==进行比较,您必须使用compare()方法