Передача значения View Controller - PullRequest
0 голосов
/ 23 мая 2018

У меня есть приложение для iOS, которое имеет Контроллер A , в котором используется табличное представление, использующее протокол 3D Touch.Каждая ячейка фактически принимает это 3D-касание, поэтому при выборе ячейки будет отображаться модальный контроллер вида (Контроллер B).

Этот контроллер B в основном используется для заполнения информации, которая затем добавляетсяна просмотр таблицы на Контроллер A .

Итак, применяя принцип СУХОЙ, я повторно использую Контроллер B для добавления и редактирования данных.

Проблема:

Контроллер B имеет свойство

var didPresentVia3dTouch : Bool = false

и метод:

public func setPreference(editMode: Bool) {
   self.didPresentVia3dTouch = editMode
}

Таким образом, предполагается, что этот метод устанавливает значение didPresentVia3dTouch в значение true из false, когда ячейка таблицы в Controller A принудительно касается, а не отображается через кнопку элемента навигации какобщий вызов «Добавить».

в Контроллер A , я сохранил ссылку на Контроллер B примерно так:

var controllerBref = AddEditViewController()

поэтому в методе

func previewingContext(previewingContext: UIViewControllerPreviewing, commitViewController viewControllerToCommit: UIViewController)

я вызываю метод setPreference из Контроллер B примерно так:

controllerBRef.setPreference(true)

для вызова контроллера B , который будет действовать как представление редактирования для данных в этой ячейке.

Одна проблема, которую я заметил, заключается в том, что когда я печатаю значение метода Controller B setPreference (editMode: Bool), константа editMode, он печатает true, но в viewWillAppear, viewDidAppear, viewDidLoad и во всех других методах значение для didPresentVia3dTouch по-прежнему читается как false, поэтому поэтому я не могу изменить заголовок панели навигации независимо от того, находится ли он в режиме редактированияили Добавить новый режим.

Есть что-то, чего я пропускаю или не понимаю?Я попробовал делегирование, но не смог понять это.

Ответы [ 2 ]

0 голосов
/ 23 мая 2018

Вам необходимо установить свойство для экземпляра контроллера представления, который будет представлен, а не какой-то случайный экземпляр, который вы создали и сохранили в свойстве.

Использование:

func previewingContext(previewingContext: UIViewControllerPreviewing, commitViewController viewControllerToCommit: UIViewController) {
    if let destVC = viewControllerToCommit as? AddEditViewController {
        destVC.setPreference(editMode:true)
    }
}
0 голосов
/ 23 мая 2018

Проблема в том, что эта строка

var controllerBref = AddEditViewController()

не имеет отношения к представленному в настоящее время VC, я имею в виду, что это отдельный экземпляр, поэтому, когда вы представляете B, установите его на controllerBref

...