2012-04-04 3 views
0

Любая помощь будет оценена.Обратите внимание, что представление загружается извне viewController

Я ищу способ программно уведомлять, что представление загружается извне этого viewController.

Допустим, у моего основного вида есть 5 кнопок, после загрузки представления и появления кнопок. Я хочу, чтобы вас уведомили в другом файле (за пределами этого viewContrller), что он загружен. Как/Где я могу проверить это и получать уведомление?

Нужно ли мне делать некоторые ориентированные на Аспект программирования?

+0

Возможно ли это, что нельзя добавлять/изменять что-либо в исходном коде этого диспетчера представлений. Все изменения кода, которые я хочу сделать для отслеживания, должны быть закодированы вне этого viewController в файле управления. – ramo

+0

Вы можете сделать свой объект управления наблюдателем изменений свойств внутри другого объекта. Я обновил ответ с объяснением. –

ответ

2

Использование NSNotificationCenter. Вы можете общаться между классами.

0

Слушайте пользовательскую NSNotification внутри вашего другого объекта. Попросите своего диспетчера просмотра опубликовать это уведомление в зависимости от того, какая часть его жизненного цикла имеет наибольший смысл (viewDidLoad, viewDidAppear ...).

Если вы не можете отправить уведомление, то наблюдение за ключевой панелью может быть путем. Например, вы можете поместить что-то подобное в вашем объекте управления, а затем реализовать observeValueForKeyPath::

[viewController addObserver:self 
       forKeyPath:@"view" 
        options:NSKeyValueObservingOptionNew 
        context:NULL]; 
0

NSNotificationCenter или метод делегата является наиболее подходящим способом для достижения этой цели.

0

Хотя вы можете сделать это с уведомлениями, как предложили другие, или KVO, это настоятельно предлагает проблему с дизайном. Вы никогда не должны напрямую обращаться к внутренним представлениям контроллера просмотра. Поэтому более глубокий вопрос: зачем вы хотите знать?

Наиболее вероятная причина в моем опыте заключается в том, что вы позволяете другому объекту устанавливать заголовки или модифицировать их. Это нарушает MVC и приводит к тем проблемам, которые вы, вероятно, пытаетесь исправить. Правильный способ справиться с этим состоит в том, чтобы поместить данные в объект модели, который используется совместно с различными контроллерами представлений. Контроллер текущего вида может наблюдать изменения в модели и соответствующим образом обновлять свои элементы интерфейса.

+0

Я ищу способ программно уведомлять, что представление загружается извне этого viewController. Я понимаю, что для связи между классами я мог бы использовать NSNotificationCenter или использовать метод делегата или тег представления и т. Д. Но я не хочу ничего менять в исходном коде контроллера. Я хочу сказать, что это так, как библиотека или фреймворк, чтобы управлять этим извне. Все мои поисковые запросы до сих пор не так полезны, похоже, что в Objective-C есть какое-то ориентированное на ASP-программирование программирование, которое мне может понадобиться. – ramo

+0

Можете ли вы объяснить, почему вы хотите получить доступ к частной информации диспетчера представления (ее взгляды, за которые она несет исключительную ответственность за управление)? Breaking MVC будет склонять вас к укусу в какао. Инструмент, который вы будете использовать здесь, это KVO (Key Value Observing), но он настоятельно предлагает проблему дизайна. –

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