2013-10-24 3 views
0

Я знаю, как настроить «нормальную» делегацию между ViewController, которые напрямую зависят. Поэтому, если я говорю, мне нужно отправить сообщение с одного представления на его верхний, я знаю, как это сделать. Но как мне настроить делегат, если между ними есть больше ViewControllers?Делегирование между ViewControllers

Так м, скажем, у меня есть эта установка по схеме:

ViewController1 -> ViewController2 -> ViewController3 (через ButtonPressed) (через ButtonPressed)

Если я хочу установить (например,) NSString в VC1 от VC2, я просто пишу в prepareForSegue, где я называю VC2:

VC2.delegate = self; 

Но что мне делать, если я хочу, чтобы передать данные между VC3 и VC1 без изменения VC2? Для чего я устанавливаю делегат, если он не «я»? Я знаю, что мое описание очень плохое, но я не могу описать его лучше.

Я просто хочу: VC1 имеет одну кнопку и ярлык; кнопка открывает VC2, у которой также есть одна кнопка, но нет метки; этот VC2Button показывает VC3; И с прикосновением к кнопке в VC3 я хочу изменить ярлык в VC1. Но без необходимости устанавливать делегат на VC2, а затем на VC1, я знаю, как это работает.

Надеюсь, что вы получите то, что я хочу.

Заранее благодарен!

+0

Проверьте другие источники связи, такие как NSNotification или KVO. –

+0

Спасибо! NSNotification решила это! – Gustl007

ответ

0

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

0

Вы можете передать делегат от VC2 к VC3 так:

Inside VC1: 
VC2 *vc2 = [VC2 alloc] init]; 
vc2.delegate = self; 

Inside VC2: 
VC3 *vc3 = [VC3 alloc] init]; 
vc3.delegate = self.delegate; 

Или вы можете использовать целевой селектор шаблона дизайна для достижения этой цели.

Target Селектор путь:

Inside VC1: 
VC2 *vc2 = [VC2 alloc] initWithTarget:(id)iTarget andSelector:(SEL)iSelector]; 

Inside VC2: Pass on the target/selector received from VC1 
VC3 *vc3 = [VC3 alloc] initWithTarget:(id)iTarget andSelector:(SEL)iSelector]; 
+0

Но тогда мне нужно импортировать заголовок и протокол из VC3 в каждый ViewController? Так и в VC2. Как работает шаблон настройки целевого селектора? – Gustl007

+0

Я обновил свой ответ для целевого выбора. – Abhinav

+0

ОК, извините, но я этого не понимаю. Какая разница между путями? мне кажется, что они имеют те же самые усилия. – Gustl007

Смежные вопросы