Xcode - передать свойство для просмотра контроллера в раскадровке

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

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

Проблема в том, что моему пользовательскому контроллеру табличного представления нужны некоторые свойства. Я хотел бы передать свойства из класса, в котором я создаю раскадровку (раскадровка вызывается из другого класса). Контроллер представления, содержащий представления контейнера, создается, как показано ниже:

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

UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Phenotype" bundle:nil];
        GeneralViewController *vc = [sb instantiateViewControllerWithIdentifier:@"phenotype"];
        [vc setProperty:property]; // I would like to pass this property to the custom table view controller.
        [self.navigationController pushViewController:vc animated:YES];

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

TableViewController *tablevc = [sb instantiateViewControllerWithIdentifier:@"table"];
    [tablevc setProperty:property];

...но безуспешно.

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

Спасибо за вашу помощь,


person Trichophyton    schedule 14.03.2017    source источник


Ответы (1)


Выберите свой переход от синего прямоугольника к tableView сверху и дайте ему идентификатор перехода :) скажем, идентификатор перехода «abcd».

В вашем ViewController с контейнером напишите

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "abcd" {
            let tableView : YourTableViewClass = segue.destination as! YourTableViewClass
            //pass whatever params want :)
        }
    }

ИЗМЕНИТЬ

Встроенные переходы ведут себя так же, как и другие переходы, за одним исключением: другие переходы вам придется выполнять либо программно, либо инициируя какое-то событие, когда встроенный переход выполняется автоматически при загрузке контейнера :)

Таким образом, вы можете иметь идентификатор перехода, писать код в prepareForSegue так же, как вы делаете это для других переходов :)

person Sandeep Bhandari    schedule 14.03.2017
comment
Огромное спасибо! Вы сделали мой день :-). Я никогда не был большим поклонником раскадровок и никогда не вникал в детали этих переходов. Спасибо!! - person Trichophyton; 14.03.2017
comment
Я рад, что мой ответ был вам полезен :) удачного кодирования - person Sandeep Bhandari; 14.03.2017