我要做的是捕获表视图控制器中单元格的textLabel.text,并将其传递给另一个视图中的标签。经过大量的研究,到目前为止我所拥有的是:
var valueToPass:String!
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
println("You selected cell #\(indexPath.row)!")
// Get Cell Label
let indexPath = tableView.indexPathForSelectedRow();
let currentCell = tableView.cellForRowAtIndexPath(indexPath!) as UITableViewCell!;
valueToPass = currentCell.textLabel!.text
println("\(valueToPass) is captured")
performSegueWithIdentifier("theSegue", sender: self)
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if (segue.identifier == "theSegue") {
var viewController = segue.destinationViewController as FinalView
viewController.resto = valueToPass
}
}
这是FinalView的代码,它是变量'resto'所在的地方:
class FinalView: UIViewController{
var resto:String!
override func viewDidLoad() {
super.viewDidLoad()
println("the restoname is: \(resto)")
restoLabel.text = resto
}
@IBOutlet var restoLabel: UILabel!
}
但是当我检查一切是否正常时,这是我的println语句的结果:
the restoname is: nil
You selected cell #13!
Tanad Thai is captured
为什么字符串'Tanad Thai'没有在FinalView类中传递给'rest'?我非常感谢能得到的所有帮助。
答案 0 :(得分:0)
您在编写代码方面做得非常出色,但您需要考虑所学内容。查看仪器的输出:
the restoname is: nil
You selected cell #13!
Tanad Thai is captured
该输出证明在调用表视图控制器的viewDidLoad
之前,FinalView的didSelectRowAtIndexPath:
被称为。因此,您无法使用didSelectRowAtIndexPath:
设置viewDidLoad
所依赖的值!您需要找到之前的时刻。就个人而言,我建议在prepareForSegue
中完成所有工作。
另外,我有点担心您可能会在故事板中执行segue 两次 - 一次在代码中。如果您已设置要从故事板中的单元格发出的segue,则无需调用performSegueWithIdentifier
- 它将自动调用。