2016-07-23 3 views
1

ここに私が現在持っているコードはあります:変数を継承してコントローラを表示するときに変数を渡すとき

var valueToPass:String!

func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) { 
    let indexPath = tableView.indexPathForSelectedRow(); 
    let currentCell = tableView.cellForRowAtIndexPath(indexPath!) as UITableViewCell!; 

    valueToPass = currentCell.textLabel.text // valueToPass now equals "test" 
    performSegueWithIdentifier("yourSegueIdentifer", sender: self) 

} 

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    var viewController = segue.destinationViewController as AnotherViewController 
    viewController.passedValue = valueToPass // valueToPass equals nil here? Why? 
} 

あなたが見ることができるように、私はdidSelectRowAtIndexPathにvalueToPassに "テスト" が割り当てられているが、prepareForSegueに、valueToPassはnilですか?どうして?交換

+0

は、あなたのテーブルビューがセグのストーリーボードにレイアウトされていますか?その場合、私は 'tableView:didSelectRowAtIndexPath:'が 'prepareForSegue:sender:'の前に実際に呼び出されているかどうかはわかりません。両方のメソッドでブレークポイントを削除し、セルをタップするときに最初にトリップを確認することで、これをテストできます。 'prepareForSegue:sender:'他のメソッドに暗黙の依存関係がないようにしてください。 – markedwardmurray

答えて

1

試してみてください。これにより

func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) { 
    let indexPath = tableView.indexPathForSelectedRow(); 
    let currentCell = tableView.cellForRowAtIndexPath(indexPath!) as UITableViewCell!; 

    valueToPass = currentCell.textLabel.text // valueToPass now equals "test" 
    performSegueWithIdentifier("yourSegueIdentifer", sender: self) 

} 

:あなたはストーリーボードでセグエをしたとき

また
func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) { 

    let currentCell = tableView.cellForRowAtIndexPath(indexPath.row) as! UITableViewCell; 

    valueToPass = currentCell.textLabel.text! // valueToPass now equals "test" 
    performSegueWithIdentifier("yourSegueIdentifer", sender: self) 

} 

、あなたは次のViewControllerにテーブルビューからドラッグしていないことを確認してください。これは自動的にこれを行うとsegueはBEFORE didSelectRow ...と呼ばれ、値を設定する前にsegueを実行するためです。テーブルビューを新しいビューにホストするビューコントローラからドラッグするだけです。

+0

"また、ストーリーボードでsegueを作成したときに、tableviewから次のviewcontrollerにドラッグしていないことを確認してください。自動的に、segueを実行する前にdidSelectRowと呼ばれます...値を設定する前にsegueを実行します。テーブルビューをホストするviewcontrollerから新しいビューにドラッグするだけです。 " これは問題でした。本当にありがとう! – johnniexo88

+0

問題ありません:)! – Tob

関連する問題