Swift:字符串值未从tableView传递到其他视图

时间:2015-04-25 19:47:29

标签: ios swift

我要做的是捕获表视图控制器中单元格的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'?我非常感谢能得到的所有帮助。

1 个答案:

答案 0 :(得分:0)

您在编写代码方面做得非常出色,但您需要考虑所学内容。查看仪器的输出:

the restoname is: nil
You selected cell #13!
Tanad Thai is captured

该输出证明在调用表视图控制器的viewDidLoad 之前,FinalView的didSelectRowAtIndexPath:被称为。因此,您无法使用didSelectRowAtIndexPath:设置viewDidLoad所依赖的值!您需要找到之前的时刻。就个人而言,我建议在prepareForSegue中完成所有工作。

另外,我有点担心您可能会在故事板中执行segue 两次 - 一次在代码中。如果您已设置要从故事板中的单元格发出的segue,则无需调用performSegueWithIdentifier - 它将自动调用。