влияние на представление из AppDelegate

я знаю, что это вопрос новичков, но я просто не мог найти решение. у меня есть приложение с раскадровкой. это приложение с вкладками, и каждая вкладка ведет к контроллеру навигационного представления, а затем к корневому контроллеру представления. в контроллере навигации у меня есть кнопка входа. нажатие на нее отправляет сообщение делегату приложения для обработки открытия сеанса с Facebook. я хочу, чтобы после открытия сеанса с facebook установить заголовок кнопки для выхода из системы, потому что это то, что она сделает, если я нажму ее снова. все это было визуально запрограммировано, а не жестко закодировано, поэтому большая часть кода отсутствует. теперь я знаю, что существует только один экземпляр делегата приложения, поэтому к нему довольно легко получить доступ из представления, но как мне перейти от делегата приложения к активному сеансу представления? я попытался поместить его в метод viewDidLoad, но, по-видимому, обратный вызов из API Facebook не перезагружает представление (как и не должно, чтобы система снова не работала зря)

есть идеи, как заставить делегата приложения отправить сообщение в активный сеанс представления?


person Yoav Schwartz    schedule 18.11.2012    source источник
comment
Можете ли вы изменить заголовок кнопки непосредственно перед отправкой сообщения делегату приложения? (То есть, когда кнопка выбрана, вы знаете, что она изменит свою функцию при следующем нажатии.)   -  person Phillip Mills    schedule 19.11.2012
comment
нет, потому что я не знаю до входа в делегат приложения, успешно это или нет. у меня есть свойство в appdelegate, которое представляет собой флаг. true = у меня есть сессия, кнопка должна быть "выйти" или "false", у меня ее нет, и мне нужно войти.   -  person Yoav Schwartz    schedule 19.11.2012


Ответы (1)


Вот несколько способов сделать это:

  1. Вы можете использовать делегат вашего приложения для публикации уведомления, когда пользователь входит/выходит из системы (библиотека Facebook может уже публиковать уведомления?), и ваши контроллеры представления могут регистрироваться для этого уведомления, чтобы они могли изменять свое состояние, когда сеанс Facebook меняет состояние. Вам также нужно что-то сделать с вашим методом viewDidLoad, чтобы, если у пользователя есть сеанс из предыдущего входа в систему, контроллер переходил в правильное начальное состояние. Ознакомьтесь с https://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/Notifications/Introduction/introNotifications.html#//apple_ref/doc/uid/10000043i для получения дополнительной информации о программировании уведомлений. .
  2. Вы можете реализовать код в viewWillAppear:animated на своем контроллере представления, чтобы когда представление отображалось после входа пользователя в систему, контроллер запрашивал делегата приложения, чтобы определить состояние вашего сеанса. Я подозреваю, что это то, что вы пытаетесь сделать, помещая код в viewDidLoad, но представление уже загружено, поэтому этот код не будет вызываться после входа в систему. viewWillAppear:animated вызывается непосредственно перед появлением представления.
person rickerbh    schedule 19.11.2012