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
}
}
"userList [userList.count - customIndexPath!.row - 1] .Title"に値があるかどうか試してみてください。 vc変数を設定して何が起こったかを見てから、printステートメントを置いてください。また、あなたのセグの識別子が正しいことを確認してください –
@ The_Curry_Man私はそれをして、私は私のプリントステートメントから戻って聞いていない。私のuserListに値がない場合でも、少なくともクラッシュするはずですが、私はそれをしません。 –