Как узнать из какого контроллера вида вызывается метод
Чтобы дать больше подробностей: я работаю с 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;
}