現在swiftを使って簡単な日記アプリを作っています。
投稿された日記をUserDefaultsを使って保存し、一覧をTableViewのセルに表示するところまでは実装できたのですが、セルをタップした時に値がセグエ先のViewControllerに渡せていません。
AppDelegateを使って値を渡そうとすると、最初のタップがnilになり、次のタップの時に先ほどタップしたセルの情報がセグエ先のViewControllerに表示されてしまいます。
プロトコルを作成して値を渡したほうが良いのでしょうか?
また、セルの情報を別のViewControllerで表示する方法の主流は何なのでしょうか?
見づらいかもしれませんが、私が書いたコードも記述しておきます。
lang
1Appdelegate 2 3class AppDelegate: UIResponder, UIApplicationDelegate { 4 var diaryContent:String? 5 var diaryDate:String? 6}
lang
1//セルがタップされた時のメソッド 2 override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 3 performSegueWithIdentifier("ToDetailDiaryViewController", sender: nil) 4 let diary = diaries[indexPath.row] 5 diaryContent = diary.content 6 diaryDate = diary.date 7 } 8override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 9 if segue.identifier == "ToDetailDiaryViewController" { 10 let destinationViewController = segue.destinationViewController as! UINavigationController 11 let detailDiryViewController = destinationViewController.topViewController as! DetailDiaryViewController 12 detailDiryViewController.diary = self.currentSelectedDiary 13 var appDelegate:AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate 14 appDelegate.diaryContent = diaryContent 15 appDelegate.diaryDate = diaryDate 16 } else { 17 let destinationViewController = segue.destinationViewController as! UINavigationController 18 let newDiaryViewController = destinationViewController.topViewController as! NewDiaryViewController 19 newDiaryViewController.delegate = self 20 } 21 }
lang
1var appDelegate: AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate 2 var diaryContent = appDelegate.diaryContent 3 var diaryDate = appDelegate.diaryDate 4 5 diaryTextView.text = diaryContent 6 self.navigationItem.title = "\(diaryDate)" 7 println(diaryDate) 8 println(diaryContent)
「セグエ先のViewController」のコードも書いてください。
回答2件
あなたの回答
tips
プレビュー