Как установить свойство класса детей в Swift

В моем контроллере представления слева, ModuleDetailsVC, у меня есть свойство класса с именем moduleId. Моя проблема в том, что я хочу передать это свойство в ChartVC, чтобы создать соответствующую графику. У меня есть представление контейнера, потому что мне нужен другой контроллер представления для моего представления диаграммы.

class ModuleDetailsVC: UIViewController {
  @IBOutlet weak var chartSubView: UIView!
  private var _module: Module?

  [...]
}

class ChartVC: UIViewController {
  var moduleId: Int!

  func setModuleId(moduleId: Int) {
    self.moduleId = moduleId
  }

  [...]
}

Где вызвать ChartVC.setModuleId()? Если это правильное решение... (я уже пробовал ViewDidLoad/Appear/SubViewLayout... и т.д.

PS: Название может быть совершенно неправильным, если у вас есть идеи, просто отредактируйте.

введите здесь описание изображения


person Community    schedule 30.08.2015    source источник
comment
Это поможет appcoda.com/ и stackoverflow.com/questions /17995799/, а также stackoverflow.com/questions/20017026/   -  person Shoaib    schedule 30.08.2015
comment
Спасибо, я прочитаю это. Спрашивая об этом, я также хотел подтвердить, что мой дизайн был законным, что не было лучшего варианта для этого. Можете ли вы подтвердить мне это, даже если я знаю, что нет «идеального» решения   -  person    schedule 30.08.2015
comment
@Shoaib Хорошо, я только первая ссылка, и я уже знаю это. Я уже использую этот метод для моего обычного представления для просмотра передачи данных с использованием перехода. Но для меня описанная ситуация не является аналогом, потому что я использую представление контейнера, и я уже пытался использовать переход для передачи данных безрезультатно. (Думаю, переход не используется как обычно?) Если вы знаете, как использовать этот переход, просветите меня, пожалуйста :)   -  person    schedule 30.08.2015
comment
Хорошо, я закончил читать две другие ссылки, и они тоже о переходах, и это то, что я уже знаю. Я просто не знаю, как применить это к такому «своему» переходу :/   -  person    schedule 30.08.2015
comment
Можете ли вы поделиться кодом, который отображает ChartVC, или объяснить, как вы подключили его к раскадровке?   -  person hennes    schedule 30.08.2015
comment
В коде для ChartVC нет ничего, как показано на картинке, есть контейнер, и я просто поместил все в соответствующий вид по умолчанию. Я просто установил «пользовательский класс» представления контейнера на ChartVC. Я ответил на ваш вопрос?   -  person    schedule 30.08.2015
comment
@Mayerz извините, я не заметил этот контейнер. Я думал, ты управляешь контроллером. У вас есть экземпляр ChartVC в классе ModuleDetailsVC?   -  person Shoaib    schedule 30.08.2015
comment
Ну нет, я бы хотел, но это создано раскадровкой. (Но у меня есть контейнер UIView)   -  person    schedule 30.08.2015


Ответы (1)


Контроллер представления, который вызовет переход для отображения представления контейнера, является его родительским контроллером представления. В вашем случае это контроллер слева — ModuleDetailsVC.

Чтобы передать данные в контроллер представления контейнера ChartVC, вам просто нужно переопределить prepareForSegue в контроллере представления (ModuleDetailsVC).

class ModuleDetailsVC: UIViewController {
    private var module: Module

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if let chartVC = segue.destinationViewController as? ChartVC {
            chartVC.setModuleId(module.id)
        }
    }
}

class ChartVC: UIViewController {
    var moduleId: Int!

    func setModuleId(moduleId: Int) {
        self.moduleId = moduleId
    }
}
person hennes    schedule 30.08.2015
comment
Блин, я сначала попробовал это, но я получил переход с идентификатором перехода, и невозможно заставить его работать. Это потому, что я не мог сделать это с идентификатором перехода? Большое спасибо. - person ; 30.08.2015
comment
@Mayerz Использование идентификатора перехода также должно работать, если вы настроили его в раскадровке и не ошиблись в своем коде. - person hennes; 30.08.2015
comment
Тогда мой вопрос бесполезен, я, должно быть, сделал глупую ошибку, потому что все эти вещи довольно тривиальны, я просто впервые использовал ViewContainer, поэтому я поставил ошибку на счет и не проверил все трижды. Спасибо - person ; 30.08.2015