Доберитесь до контроллера представления, который продвинул видимый контроллер представления

У меня есть приложение, которое имеет a UINavigationController это продвигает a UITabBarController в представление. Это UITabBarController имеет четыре вкладки, одна из которых показывает пользовательское UIViewController, экземпляр EventInformationViewController. Кнопка в этом пользовательском контроллере представления в свою очередь продвигает другой пользовательский контроллер представления EventRatingAddViewController в представление. Действие в этом контроллере представления должно вызвать метод в EventInformationViewController экземпляр. Следующий код делает сбой приложения вместо этого:

// get the index of the visible VC on the stack
int myIindex = [self.navigationController.viewControllers indexOfObject:self.navigationController.visibleViewController];
// get a reference to the previous VC
EventInformationViewController *prevVC = (EventInformationViewController *)[self.navigationController.viewControllers objectAtIndex:myIindex - 1];
[prevVC performSelector:@selector(rateCurrentEvent:)];

Я думал, что viewControllers свойство сохранило массив всего VCS на стопке навигации, таким образом, индекс в настоящее время видимый минус нужно указать на VC, который продвинул в настоящее время видимый VC в представление. Скорее это, кажется, указывает на мой UITabBarController:

-[UITabBarController rateCurrentEvent:]: unrecognized selector sent to instance

Что произошло с этим и что еще более важно, как я получаю указатель на VC, который продвигал в настоящее время visisble VC в представление?

Править: Я закончил тем, что создал протокол делегата для EventRatingAddViewController и присвоение EventInformationViewController как делегат. Это работает хорошо - все еще я думаю, что должен быть способ получить доступ к продвижению VC через стопку навигации.

8
задан mvexel 6 July 2010 в 14:14
поделиться

1 ответ

Я почти уверен, что UITabBarController действительно нажмите на текущий контроллер представления, но то, что вы ищете, - это контроллер представления одной из вкладок UITabBarController , контроллер представления, который был виден в UITabBarController в то время этот UITabBarController поместил ваш контроллер представления в стек навигации. Возможно, этот UITabBarController поместил ваш контроллер представления в стек, потому что это было сказано ему контроллером представления видимой вкладки, поэтому это будет примерно так: [self.tabBarController.navigationController pushViewController: someViewController]; .

Чтобы узнать, какой контроллер представления был показан в UITabBarController в то время, когда ваш контроллер представления был помещен в стек, необходимо использовать свойство .selectedViewController , чтобы приведет к примерно такому результату:

// get the index of the visible VC on the stack
int currentVCIndex = [self.navigationController.viewControllers indexOfObject:self.navigationController.topViewController];
// get a reference to the previous VC
UITabBarController *prevVC = (UITabBarController *)[self.navigationController.viewControllers objectAtIndex:currentVCIndex - 1];
// get the VC shown by the previous VC
EventInformationViewController *prevShownVC = (EventInformationViewController *)prevVC.selectedViewController;
[prevShownVC performSelector:@selector(rateCurrentEvent:)];
6
ответ дан 5 December 2019 в 22:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: