2014-12-14 2 views
1

В моем приложении есть два контроллера ViewControll, которые я переключаю взад и вперед через segues. Первый (основной) VC имеет несколько переменных, которые инициализируются. Второй VC - редактор клавиатуры, который может изменить одну из переменных в первом VC; первый VC отправляет индикатор изменения переменной, а второй VC отправляет обратно новое значение.Измененное значение в ViewController сбрасывается после возврата из segue

Однако, если я изменяю значение, измените второе значение, первое значение, которое было изменено, сбрасывается до его начального значения.

Вот первый ViewController (по крайней мере, необходимая для примера часть):

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:

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 изменен, а второй контроллер пытается изменить Value1 на 10, тогда Value1 равен 10. Однако если главный контроллер затем изменит Value2, а второй контроллер попытается изменить Value2 на 20, тогда Value2 станет 20, но Value1 есть t обратно к его инициализированному значению 1.

Недопустимо передавать все сменные значения в первом контроллере ко второму, а затем, после второго, отправить их обратно (после любых изменений) на первый, есть ли способ, чтобы второй контроллер менял одно значение без сброса других?

+0

Используете ли вы разматывать сеанс, чтобы вернуться к первому контроллеру? Если нет, то вы фактически не возвращаетесь, вы создаете новый контроллер. – rdelmar

+0

"Un-wind - seg - ue?" Ваши идеи интригуют меня, и я хочу подписаться на ваш информационный бюллетень. (Серьезно, это решило - спасибо.) –

ответ

2

Когда вы запускаете Segue, он инициализирует новый ViewController. Вы должны использовать кнопку «Назад» или popViewController

Как это:

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

Ответил rdelmar в своем комментарии к моему первоначальному вопросу. (Это было добавлено, поскольку я не мог найти способ пометить комментарий к исходному вопросу в качестве ответа.)

Смежные вопросы