2016-05-22 1 views
1

デリゲートメソッドを使用して2つのビューコントローラ間でデータを正常に渡しています。デリゲートメソッドでデータを渡す

最初のビューコントローラは「レビュー」画面で、2番目のビューコントローラは主にUITextViewを含む「編集」画面です。

編集画面でテキストビューの内容を変更してヒットセーブすると、正常にレビュー画面に渡ります。しかし、編集画面に戻ると、UITextViewは空です。

編集画面にデリゲートに格納されている値が保持されるようにするにはどうすればよいですか?

時間を割いていただきありがとうございます。

レビュー・ビュー・コントローラ

class AddCampaignViewController: UIViewController, UINavigationControllerDelegate, UIImagePickerControllerDelegate, UITextFieldDelegate, TitleViewDelegate { 

    @IBOutlet var titleSubtitle: UILabel! 

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

     if segue.identifier == "AddTitleViewController" { 

      let addTitleViewController = segue.destinationViewController as! AddTitleViewController 

      addTitleViewController.delegate = self 

     } 

    } 

    override func viewDidLoad() { 

     super.viewDidLoad() 

    } 


    func setCampaignTitle(campaignTitle: String) { 

     titleSubtitle.text = campaignTitle 

    } 

} 

編集ビューコントローラ

protocol TitleViewDelegate { 

    func setCampaignTitle(campaignTitle: String) 

} 

class AddTitleViewController: UIViewController, UITextViewDelegate { 

    var delegate : TitleViewDelegate! 

    var campaignTitle : String! 

    @IBOutlet var titleTextView: UITextView! 

    override func viewDidLoad() { 

     super.viewDidLoad() 

     titleTextView.becomeFirstResponder() 

     let logButton : UIBarButtonItem = UIBarButtonItem(title: "Save", style: UIBarButtonItemStyle.Plain, target: self, action: "saveTitle:") 

     self.navigationItem.rightBarButtonItem = logButton 

    } 

    func saveTitle(sender: UIBarButtonItem) { 

      delegate.setCampaignTitle(titleTextView.text!) 

      self.navigationController?.popViewControllerAnimated(true) 

    } 

} 

答えて

3

セグエは新しいEditViewControllerたびに作成されます。データを転送するには、データをプロパティに割り当てて、メソッドのtitleTextView.textにそのデータをコピーする必要があります。これは、@IBOutletが設定されていないために必要です。prepareForSegueが実行されている場合は、まだnilです。

ので:

  1. は、あなたのEditViewControllerにプロパティvar textToEdit = ""を追加します。 prepareForSegue
  2. EditViewControllerviewDidLoadaddTitleViewController.textToEdit = /* the text you want to edit */
  3. を設定titleTextView.text = textToEditを設定します。

注:お使いのdelegateあなた@IBOutletのもweak宣言する必要がありますあなたがEditViewController Sを解放したことがないことにより、メモリリークが発生する原因となる(保持サイクルを避けるためにweakを宣言する必要があり

関連する問題