Подтвердить что ты не робот

Как передать данные из моего ViewController в представление контейнера?

У меня есть раскадровка, созданная в XCode и имеющая MainViewController. В MainViewController я добавил ContainerView, который, естественно, создает Segue с другим VIewController.

В моем файле MainViewController.m я настроил данные и хочу связать эти данные с меткой в ​​ContainerView, но я думал, что могу нажать на File Owner и сделать это, но, конечно, не могу, потому что они 2 теперь доступны различные диспетчеры просмотра.

Может кто-то, пожалуйста, помогите мне, потому что я борюсь с этим. Должен быть простой способ, но я не могу взломать его!

Спасибо

4b9b3361

Ответ 1

Вы можете использовать prepareForSegue так же, как и любые другие два контроллера - этот метод будет вызываться после создания двух контроллеров, но до запуска либо viewDidLoad. Другой способ сделать это - использовать свойство childViewControllers родительского контроллера (встроенный контроллер является дочерним). Итак, ребенок будет self.childViewControllers [0].

После редактирования:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([[segue identifier] isEqualToString:@"EmbedSegue"]) {
        MyEmbeddedController *embed = segue.destinationViewController;
        embed.labelString = self.stringToPass;
    }
}

Конечно, вы должны изменить имена на то, что у вас есть. Убедитесь, что имя, которое вы указываете в сегменте в IB, совпадает с именем, которое вы проверяете в инструкции if. В этом примере labelString - это свойство строки, которое вы создали во встроенном контроллере. Затем в этом методе viewDidLoad контроллера вы можете установить значение метки с этой строкой.

Ответ 2

Это почти тот же ответ, что и one by rdelmar только в Swift.

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if let embeddedVC = segue.destinationViewController as? MyEmbeddedController where segue.identifier == "EmbedSegue" {
        embeddedVC.labelString = self.stringToPass
    }
}

"EmbedSegue" имеет идентификатор segue, который вы установили в Interface Builder.

Ответ 3

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    // Make sure your segue name in storyboard is the same as this line
    if ([[segue identifier] isEqualToString:@"YOUR_SEGUE_NAME_HERE"])
    {
        // Get reference to the destination view controller
        YourViewController *vc = [segue destinationViewController];

        // Pass any objects to the view controller here, like...
        [vc setMyObjectHere:object];
    }
}

Я также должен отметить, что, поскольку вы используете представление контейнера, prepareForSegue будет запущен, когда вы представите ViewController, который содержит контейнер.

Ответ 4

Ответа на этот вопрос для Swift 4:

if let controller = segue.destinationController as? MyEmbeddedController, segue.identifier!.rawValue == "EmbedSegue" {
    controller.labelString = self.stringToPass
}