Как узнать из какого контроллера вида вызывается метод

Чтобы дать больше подробностей: я работаю с FBLoginView. Я использую раскадровки и отдельный файл XIB для моего LoginViewController. В моем приложении у меня есть loginViewController, который является FBLoginViewDelegate. И SettingsViewController, который является FBUserSettingsDelegate. И у меня есть кнопка пропуска в моем loginView, чтобы войти как гость вместо пользователя facebook.

Теперь, что я делаю, так это: когда приложение открывается, я показываю обзор Walkthrough, который включает в себя вид входа в систему внизу. Когда пользователь входит в систему с помощью кнопки входа в Facebook, следующий метод запускается автоматически через Facebook SDK:

- (void)loginViewFetchedUserInfo:(FBLoginView *)loginView
                        user:(id<FBGraphUser>)user;

в этом методе я выполняю переход к основному виду.

Однако пользователи могут также сначала войти в систему как гость, а затем перейти в "Настройки", и они все равно могут войти в Facebook. Что происходит, чтобы выполнить тот же метод выше!

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

Итак, мой вопрос: как я могу узнать, из какого viewcontroller вызывается этот метод?

Я получаю это предупреждение: Попытка представить, чье представление не находится в иерархии окон!

Спасибо за вашу помощь.

1 ответ

Решение
MyAppDelegate *tmpDelegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate];
id myCurrentController = tmpDelegate.myNavigationController.topViewController;
NSLog(@"%@", NSStringFromClass(myCurrentController.class));

Надеюсь это поможет..

Попробуйте это:

+ (UIViewController*) topMostController
{
    UIViewController *topController = [UIApplication sharedApplication].keyWindow.rootViewController;

    while (topController.presentedViewController) {
        topController = topController.presentedViewController;
    }

    return topController;
}
Другие вопросы по тегам