2014-12-14 1 views
1

내 앱에는 세그먼트를 통해 앞뒤로 전환하는 두 개의 ViewController가 있습니다. 첫 번째 (주) VC에는 초기화되는 많은 변수가 있습니다. 두 번째 VC는 첫 번째 VC의 변수 중 하나를 변경할 수있는 키패드 편집기입니다. 첫 번째 VC는 변경할 변수를 나타내는 지표를 전송하고 두 번째 VC는 새 값을 다시 전송합니다.Segue에서 돌아온 후 ViewController의 변경된 값이 재설정됩니다.

그러나 값을 변경 한 다음 두 번째 값을 변경하면 변경된 첫 번째 값이 초기 값으로 재설정됩니다.

class KeypadViewController: UIViewController { 

    var idToChange: Int; 
    var changedValue: Int; 

    required init(coder aDecoder: NSCoder) { 
     idToChange = 0; 
     changedValue = 0; 
     super.init(coder: aDecoder); 
    } 
    // Note that idToChange is set correctly by the segue 

    // Code that sets changedValue left out 

    @IBAction func clickTheOKButton(B: UIButton) 
    { 
     performSegueWithIdentifier("segueMainView", sender: self); 
    } 

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
     var vc: ViewController = segue.destinationViewController as ViewController; 
     switch (idToChange) 
     { 
      case 1: 
       vc.ValueOne = changedValue; 
      case 2: 
       vc.ValueTwo = changedValue; 
      default: 
       break; 
     } 
    } 
} 

주제어 요청 값 1이 될 여기

class ViewController: UIViewController { 

    var idToChange: Int; 
    var ValueOne: Int; 
    var ValueTwo: Int; 

    required init(coder aDecoder: NSCoder) { 
     idToChange = 0; 
     ValueOne = 1; 
     ValueTwo = 2; 
     super.init(coder: aDecoder); 
    } 

    @IBAction func clickChangeValue1(B: UIButton) 
    { 
     idToChange = 1; 
     performSegueWithIdentifier("segueKeypadView", sender: self); 
    } 

    @IBAction func clickChangeValue2(B: UIButton) 
    { 
     idToChange = 2; 
     performSegueWithIdentifier("segueKeypadView", sender: self); 
    } 

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
     var vc: KeypadViewController = segue.destinationViewController as KeypadViewController; 
     vc.idToChange = idToChange; 
    } 
} 

및 제의 ViewController이다 : 여기

는 (적어도 실시 예에 필요한 부분)가 제 1의 ViewController이고 두 번째 컨트롤러가 Value1을 10으로 변경하려고하면 Value1이 10이됩니다. 그러나 주 컨트롤러가 Value2를 변경하도록 요청하고 두 번째 컨트롤러가 Value2를 20으로 변경하려고 시도하면 Value2가 20이되지만 Value1 ~이다 t의 초기화 된 값을 다시 1로 설정합니다.

첫 번째 컨트롤러의 모든 변경 가능한 값을 두 번째 컨트롤러로 전달한 다음 두 번째 컨트롤러에서 모든 변경 사항을 첫 번째 컨트롤러로 모두 되돌려 보내지 않는 한, 다른 컨트롤러를 재설정하지 않고 두 번째 컨트롤러가 한 값을 변경하게하려면 어떤 방법이 있습니까?

+0

첫 번째 컨트롤러로 돌아가려면 긴장을 풀고 있습니까? 그렇지 않다면 실제로 돌아 가지 않을 것입니다. 새 컨트롤러를 인스턴스화합니다. – rdelmar

+0

"바람을 피우지 않습니까?" 당신의 아이디어가 나를 자극하고 당신의 뉴스 레터를 구독하고 싶습니다. (진지하게, 그것은 그것을 해결했다 - 감사합니다.) –

답변

2

Segue를 트리거하면 새로운 ViewController가 초기화됩니다. 당신은 "뒤로 버튼"또는 이와 같이 popViewController

를 사용해야합니다 : 내 원래의 질문에 자신의 의견에 rdelmar 응답

class KeypadViewController: UIViewController { 

    var idToChange: Int; 
    var changedValue: Int; 

    required init(coder aDecoder: NSCoder) { 
     idToChange = 0; 
     changedValue = 0; 
     super.init(coder: aDecoder); 
    } 
    // Note that idToChange is set correctly by the segue 

    // Code that sets changedValue left out 

    @IBAction func clickTheOKButton(B: UIButton) { 
     var vc: ViewController = self.navigationController.viewControllers[0] as ViewController // Your view controller's index. 
     switch (idToChange) { 
      case 1: 
       vc.ValueOne = changedValue; 
       break; 
      case 2: 
       vc.ValueTwo = changedValue; 
       break; 
      default: 
       break; 
     } 

     self.navigationController.popViewControllerAnimated(true) 
    } 

} 
0

. (원래 질문에 답글로 표시하는 방법을 찾지 못해서 추가되었습니다.)

관련 문제