Ребенок UIViewController can access it's parent with
parentViewController` и использовать его для отправки сообщений родителям. Вы можете сделать это напрямую, но ...
В зависимости от уровня взаимодействия лучше всего создать интерфейс, который реализует родительский UIViewController
. Когда дочерний элемент UIViewController
добавляется к родительскому объекту, он получает ссылку на объект, реализующий интерфейс. Он обеспечивает сильное взаимодействие между объектами, но также поддерживает правильную инкапсуляцию, и это шаблон делегата.
Итак, мой ответ: вам не нужно использовать шаблон делегата, но он кажется подходящим решением. Если вы не используете шаблон делегата, вы можете оказаться с парой объектов, которые так сильно связаны, вы могли бы просто сделать это одним объектом.
// Somewhere in your view controller A you want to add B as a child
B *b = [[B alloc] init]; // create view controller B
b.delegate = self; // set up A as the delegate to B
// Add B as child
[self addChildViewController:b];
[self.containerView addSubview:b.view];
Когда B
добавляется в детстве A
делегат получает набор. Предполагая, что A
реализует интерфейс, B
будет обладать таким свойством, как @property (weak, nonatomic) id<MySomethingDelegate> delegate;
. B
должен иметь возможность вызвать любой метод делегата в любой точке.
Что такое "Контейнер", что вы зовете? self.view за UIViewController? То, что очевидно, не обязательно очевидно для других, по крайней мере, не для таких идиотов, как я. –
MVC. Изменения в текстовом поле должны храниться где-то в каком-то классе модели (возможно, в глобальном масштабе). Контроллер представления управляет этим входом, и как только он находится в модели, вы можете видеть ее повсюду. – trojanfoe
@trojanfoe это не ответ. Я знаю, как делиться данными. Мне нужен какой-то делегат, я хочу сообщить родительскому представлению о чем-то, что только что произошло. l Помидор, вы не идиот. Да, что вы сказали, правда, его контейнерный вид, с которым я иду с self.view. – Curnelious