Я внедрил пользовательский UIViewController
, который имеет несколько контроллеров детского вида (в основном, используя раскладку Container View
, но не только).Лучший способ отправить сообщение нескольким дочерним представлениям контроллеров
Мне интересно, какой лучший способ для контроллера «корневого» представления отправить сообщение своим дочерним элементам, принимая во внимание, что контроллер (ы) просмотра дочерних элементов (ов), связанных с отправленным сообщением, не обязательно прямой ребенок из корневого контроллера?
Например:
Я хочу, чтобы отправить сообщение с #0
для просмотра контроллеров #1
и #4
. Наивная реализация перебрать ребенка #0
и отправить им сообщение, например, так:
for (UIViewController *childVC in self.childViewControllers)
{
if ([childVC respondsToSelector:@selector(myMessage:)])
{
[childVC [email protected](myMessage:)];
}
}
Но это просто не работает, потому что #3
получит сообщение (или, возможно, нет, если это UINavigationController
и я вызываю специальный метод) и не распространяю его на своих детей (здесь #4
).
So есть ли возможность отправить сообщение своим детям и передать сообщение через иерархию UIViewController
?
Если нет, то альтернатива будет использовать NSNotificationCenter
, сделать ребенок, заинтересованных в сообщении (#1
и #4
) наблюдать за уведомления, и сделать зрение корневой контроллер опубликовать уведомление, когда это необходимо. Но я нахожу это немного переполненным только для отправки сообщения двум детям.
На первом месте, если метод принимает аргумент и вы вызываете его без него, это UB. – 2013-03-07 19:08:45
Я не думаю, что это слишком много - используйте NSNotificationCenter. –
Classic NSNotificationCenter – rocky