2013-09-26 5 views
0

У меня есть 3 Scenes, подключенный через Segue.iOS: настройка делегата

SceneA>SceneB>SceneC

SceneA звонки SceneB и SceneB вызовы SceneC. Вы не можете добраться до SceneC от SceneA, не пройдя через SceneB.

Я хочу SceneA быть delegate для SceneC.

Я думаю, что я должен настроить SceneA как SceneB делегат и настройка SceneB в SceneC Delegate.

Мне действительно не нужен SceneB является делегатом SceneC. Есть ли способ, которым я могу напрямую настроить SceneA в качестве делегата SceneC?

ответ

2

Вы должны пройти SceneB звуками вашей установки, но SceneA не нужно быть delegate из SceneB. Вы можете передать информацию в SceneB, что она не будет использоваться напрямую, кроме как перейти на SceneC при срабатывании segue. Просто назовите свойство на SceneB соответственно, так что очевидно, для чего он используется.

+0

Спасибо. «... что он не будет использовать напрямую, кроме как передать SceneC». Вы имеете в виду, кроме как перейти к SceneA? – user1107173

+0

Кроме того, вы можете продумать: просто назовите свойство на SceneB соответствующим образом, чтобы было очевидно, для чего он используется. С примером? – user1107173

+1

'SceneA' переходит к' SceneB' во время segue. 'SceneB' содержит экземпляр в свойстве с именем' sceneCDelegate'. 'SceneB' передает' sceneCDelegate' '' SceneC' во время segue. – Wain

2

У вас может быть ссылка A в B, когда вы создадите C в B, установите его делегат в A. Как это. в A, когда вы создаете значение свойства set B i.e b.aObj = self ;. Когда в B вы создаете C, установите c.delegate = aObj;

1

Я согласен с Wain, но другой подход заключается в отправке уведомлений от SceneC, которые прослушивает SceneA. Это приводит к отключенному поведению, которое не всегда идеально, но это то, что нужно учитывать, не зная о ваших намерениях.

1

Рассмотрите возможность использования - [NSNotificationCenter addObserver:selector:name:object:] и - [NSNotificationCenter postNotificationName:].
Если вы не хотите, чтобы ваш делегат возвращал значение, это лучшее решение. Если вы хотите, чтобы ваш делегат вернул значение, сделайте так, как предлагалось @Wain.

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