0

Я видел много способов передачи данных с контроллера представления обратно в родительский элемент в стеке навигации, и хотя я думаю, что случай, который я собираюсь описать, должен быть довольно распространенным явлением, ничто из этого, похоже, не решает проблему. Что я хочу делать:Передача данных контроллеру родительского вида при нажатии на стрелку навигации

  1. Нажмите контроллер дочернего представления на стек навигационной панели. Я установил его свойства в контроллере родительского представления prepareForSegue(_:sender).
  2. Редактирование свойств контроллера детского представления. Пока здесь все работает.
  3. При нажатии на кнопку со стрелкой (в верхнем левом углу) контроллер детского просмотра должен выскочить (что происходит автоматически) и передать переданные данные обратно родительскому объекту.

Это было бы легко, если бы я мог настроить раскручивание в раскадровке, но это невозможно, так как кнопка со стрелкой отображается только во время выполнения. prepareForSegue(_:sender), похоже, не называется на ребенка при нажатии этой стрелки. Также нет либо canPerformUnwindSegueAction(_:fromViewController:withSender), либо unwindForSegue(_:towardsViewController) или segueForUnwindingToViewController(_:fromViewController:identifier:) либо на дочернем, либо на родительском.

Как предложено here Я мог бы переопределить метод ребенка и получить доступ к родительскому элементу из стека навигации, но родительский родитель должен иметь способ доступа к ребенку где-то, или это будет плохой дизайн, не так ли? Я благодарен за любую помощь! Я нацелен на iOS 7+.

+0

Это частично личное предпочтение, но конструкция MVC-esque позволяет избежать этой проблемы вместе. Если ваша модель изменяется во втором VC, вы можете просто обновить ее из того же источника, когда вы вернетесь к своему 1-му VC – PeejWeej

+0

http://stackoverflow.com/questions/19343519/pass-data-back-to-previous-viewcontroller это может помочь –

+0

@PEEJWEEJ Но это как раз проблема, как получить доступ к родительскому при появлении дочернего элемента? – Nickkk

ответ

0

Вы можете использовать делегат и установки, как:

  • ребенка как свойство родительского контроллера.
  • parent является как свойство делегирования дочернего контроллера. (делегат всегда слабый атрибут)

Вы можете получить доступ к родительскому объекту, где от ребенка просто используйте child.delegate. И ребенок от родителя через свойство.

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