2016-09-20 3 views
-1

私は2つのView Controllerを持っています - A & B. ViewController Aにはテキストフィールドがあります。 ViewController Aのテキストフィールドをクリックすると、別のTextフィールドを持つView Controller Bが表示されます。 ViewControllerBのキーボードでdoneをクリックすると、dissmissViewControllerが呼び出され、textfieldのデータがviewControllerBからAに移動します。dismissViewController中にテキストフィールドに値を代入できません。

私はBからAにデータを渡すことができません。私はAのViewdidLoad dissmissviewcontrollerの前に。 AのviewdidLoad()で、私はこのtextfieldA.text = textfieldBを持っています。それは投げ -

fatal error: unexpectedly found nil while unwrapping an Optional value"

+0

私が今まで明示的にviewDidLoadメソッドを呼び出すことに対して推薦します。あなたの完全なコードを投稿すると、簡単に手助けすることができます。 – BJHStudios

+1

あなたは 'viewDidLoad'を決して直接呼び出すべきではありません。あなたがseguesを使用している場合、unwind segueを使用してデータを戻すことができますが、そうでないように聞こえるので、委譲パターンがより適切かもしれません。 – Paulw11

答えて

1

委任パターン:

ViewController2:

//Define Protocol 
@protocol VC2Delegate { 
    doneClicked(val:String) 
} 

Class:VC2 { 
    //Create Delegate variable 
    var delegate:VC2Delegate? 

    //method of done clicked 
    func btnDoneClicked(sender:UIButton) { 

     //call delegate method 
     delegate.doneClicked(vc2TextField.text) 
     //dismiss view controller 
     self.dismissViewController...... 
    } 

} 

ViewController1:

//Conform Protocol 
Class:VC1, VC2Delegate { 

    //implement delegate method 
    func doneClicked(val:String) { 
     //assign value to textfield 
     vc1TextField.text = val 

    } 

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
     if segue.identifier == "MySegueFromVC1ToVC2" { 
      if let destVC = segue.destinationViewController as? VC2 { 
       //assign delegate to VC1 
       VC2.delegate = self 
      } 
     } 
    } 
} 
+0

ありがとうございます。それは働いた:) – NKay

関連する問題