2015-04-25 20 views
1

我想要做的是捕获我的表视图控制器中的单元格的textLabel.text,并将它传递给另一个视图中的标签。经过这里的许多研究是我到目前为止有:Swift:字符串值不从tableView传递到其他视图

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泰国”没有穿越到“休息”的FinalView类?我非常感谢所有我能得到的帮助。

回答

0

你已经完成了一个很好的工作仪器的代码,但你需要思考你所学到的。看看你的仪器的输出:

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

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

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

+0

这样做了!我所做的只是移动我在didSelectRowAtIndexPath中的内容,并将其移至prepareForSegue。也摆脱了performSegueWIthIdentifier。谢谢! –

相关问题