Связь от дочернего UIViewController с родительским UIViewController - PullRequest
4 голосов
/ 11 августа 2009

Я еще не понял, что у меня есть mainViewController, который переключает два представления, viewControllerA и ViewControllerB. Я переключаю представление, используя UIButton (mainButton) в mainViewController и щелкая по нему, переключает viewControllerA <-> ViewControllerB.

Теперь вот моя проблема. Мой ViewControllerA имеет кнопку UIB (ButtonA). И я хочу, чтобы, щелкнув по нему, он велел mainViewController переключиться на другое представление (viewControllerB)

Другими словами, дочернее представление (viewControllerA) должно отправить сообщение mainViewController (его родительскому представлению), что он хочет запустить метод, который принадлежит основному представлению, а не самому себе (viewA).

Как мне этого добиться?

Ответы [ 2 ]

15 голосов
/ 11 августа 2009

При общении с родительскими объектами у вас есть несколько шаблонов дизайна на выбор. Делегирование и уведомление - хороший выбор.

Большая идея здесь - это связь со слабой связью. Уведомления используют Singleton для обработки связи, в то время как Делегирование использует слабые ссылки на родительские объекты. (Проверьте Какао с любовью: сохранить циклы )

Если вы идете с делегированием, вы можете создать неофициальный протокол для вашего ViewControllerA, которому должен соответствовать MainViewController.

Вы можете назвать его протоколом ViewControllerADelegate:

    @protocol ViewControllerADelegate

    @optional
    - (void)bringSubViewControllerToFront:(UIViewController*)aController;

    @end

Или ViewControllerA может опубликовать уведомление:

[[NSNotificationCenter defaultCenter] postNotificationName:@"MyFunkyViewSwitcherooNotification" object:self];

И MainViewController должен поддерживать, если он хочет знать:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(swapThoseViews:) name:@"MyFunkyViewSwitcherooNotification" object:nil];
0 голосов
/ 11 августа 2009

Есть несколько способов добиться этого: Взгляните на протоколы http://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/ObjectiveC/Articles/ocProtocols.html здесь, а также посмотрите на использование RootViewController в некоторых примерах проекта яблока. Метроном здесь http://developer.apple.com/iphone/library/samplecode/Metronome/ использует это для переключения с основного представления на представление предпочтений. Посмотрите на модальные контроллеры представления и их взаимодействия в руководстве по программированию View COntroller, http://developer.apple.com/iphone/library/featuredarticles/ViewControllerPGforiPhoneOS/PresentingModelViewControllers/PresentingModelViewControllers.html, и вы также можете посмотреть ответы здесь Переключение между 3 или более представлениями

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...