2016-07-23 25 views
1

UITableViewからUIViewControllerにデータを渡してより詳細を表示しようとしています。UITableViewからUIViewControllerへのデータの受け渡し

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 

     if segue.identifier == "PassDetail" { 

      let vc = segue.destinationViewController as! ToDoListDetailViewController 
      let customIndexPath = self.tableView.indexPathForSelectedRow 
      vc.titleString = userList[userList.count - customIndexPath!.row - 1].Title 
      vc.descriptionString = userList[userList.count - customIndexPath!.row - 1].Description 

     } 

    } 

私はsegue push depricatedを作成し、適切な識別子を設定しました。

実行後、何も起こっていません。クラッシュしないで、印刷方法を設定しようとしましたが、セルをタップすると何も呼び出されません。

私は文字列にprintステートメントを渡すための値があり、printステートメントから返された値がないかどうかを確認しようとしました。

データがない場合でも、セルをタップすると、アプリが少なくともクラッシュするはずです。しかし、それはしません。

showのような別のセグを使って試してみましたが、そのトリックはありませんでした。

私のコードから何か不足していますか?

SOLUTION

私は解決策を見つけました。

これは私がこれがどのように機能するかを理解する方法です。 上記のコードはデータを渡しますが、次のviewcontrollerには渡されません。

この問題を解決するために、私はdidelectRowAtIndexPathメソッドを使用し、文字列を設定しました。

以下は私の完全な作業コードです。

オーバーライドのfuncのtableView(のtableView:のUITableView、didSelectRowAtIndexPath indexPath:NSIndexPath){

contentTitle = "Some title" //contentTitle is a global variable 

    tableView.deselectRowAtIndexPath(indexPath, animated: true) 
    let row = indexPath.row 
    performSegueWithIdentifier("PassData", sender: row) 

} 
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 

    if segue.identifier == "PassData" { 

     let vc = segue.destinationViewController as! ToDoListDetailViewController 
     vc.titleString = contentTitle //setting the titleString created from my ToDoListDetailViewController and setting it to contentTitle 

    } 

} 
+0

"userList [userList.count - customIndexPath!.row - 1] .Title"に値があるかどうか試してみてください。 vc変数を設定して何が起こったかを見てから、printステートメントを置いてください。また、あなたのセグの識別子が正しいことを確認してください –

+0

@ The_Curry_Man私はそれをして、私は私のプリントステートメントから戻って聞いていない。私のuserListに値がない場合でも、少なくともクラッシュするはずですが、私はそれをしません。 –

答えて

1

私は疑う何から、あなたはプログラムであなたのセグエをプッシュしていません。

hereからヒントを得て、didSelectRowAtIndexPathメソッドからsegueをプッシュしましたか?

+0

私はもともとセグをプッシュしようとしましたが、正しい方法はセグを表示することです。しかし、それはどちらもうまくいきませんでした。 –

+0

それは大丈夫ですが、あなたdidSelectRowAtIndexPathメソッドから手動で行いましたか? –

+0

hmm、いいえ、私は実際にそれを持っていません。チャンスが来たら、私はあなたに戻ってきます。 –

関連する問題