2015-04-10 3 views
1

У меня есть два вида, один из них - основной, а другой - вид контейнера. То, что я хочу сделать, это отправить переменную в дочерний элемент и выполнить ее. Как сообщить ребенку просмотреть эти две вещи из родительского представления?Swift Container control from parent view

Несколько проблем, которые у меня были, ViewDidLoad не работает в режиме контейнера. и когда я попытался переписать информацию, он также сказал, что было реализовано периодическое программирование или контейнер, указывающий на то, что контейнер не может быть удален.

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

+0

Вы должны уточнить, что вы подразумеваете под «представлением контейнера». Вы перетаскиваете контейнерный вид в IB и получаете встроенный в него контроллер просмотра? Вы также должны быть осторожны на своем языке; viewDidLoad - это метод контроллера представления, поэтому он не будет вызываться в «представлении контейнера», если вы действительно не говорите о контроллере представления; не используйте «представление», если вы имеете в виду «контроллер просмотра». – rdelmar

ответ

1

Прежде все, вы должны заметить, что любые созданные вами контейнеры будут доступны через свойство childViewControllers на вашем основном контроллере. Это дает вам связь между основным контроллером и дочерним контроллером.

Теперь, что вы пытаетесь сделать, это изменить что-то в таблице ребенка, если таблица родителя изменится. Существует много способов сделать это, но в этом случае существует довольно простая методика: вы всегда знаете, когда изменяется ячейка ячейки родителя, в didSelectRowAtIndexPath. Итак, что вам нужно сделать, это просто в пределах didSelectRowAtIndexPath, когда строка меняет вызов метода в дочернем контроллере, который передает любую информацию о текущей выбранной строке, которую вы хотите использовать. Этот метод изменит таблицу и сделает все, что вы хотите сделать в дочернем представлении, поскольку это часть дочернего контроллера.

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

0

Вы можете использовать делегаты для этого. Делегаты только протоколы можно реализовать, чтобы передать данные другому мнению:

protocol nameOfProtocol { 
    func someFunc 
} 

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

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

let viewController = storyboard?.instantiateViewControllerWithIdentifier("viewControllerName") as! ViewControllerName