2012-01-02 2 views
1

Я потратил на это время: используя шаблон панели вкладок (без раскадровки), я могу легко переключаться между вкладками и переключаться между представлениями в каждой таблице, однако, когда это происходит к обмену между UITabBarController и UIViewController любой код, который я продолжаю пытаться, не будет работать.Переключение между UITabBarController и UIViewController (iOS Xcode)

-(IBAction)tabtoview:(id)sender{ 
    [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationDuration:0.5]; 
    [UIView setAnimationTransition:UIViewAnimationTransitionCurlUp 
          forView:self.view 
          cache:YES]; 
    [self.tabBarController removeFromParentViewController]; 
    [self.view addSubview:self.mainscreen]; //Crashes here 
    [UIView commitAnimations]; 
} 

Вместо удаления tabBarController было бы предпочтительнее, если бы я мог скрыть/отключить его после анимации. Любая помощь приветствуется!

+0

Какое сообщение об ошибке при сбое? – carbonbasednerd

+0

SIGABRT - «Завершение приложения из-за неперехваченного исключения» NSInvalidArgumentException », причина: '- [UIViewController superview]: непризнанный селектор, отправленный в экземпляр 0x6dae9f0'' – Nightfa11

ответ

2

Я думаю, что вы проблема заключается в том, что UITabBarController и UINavigationController те виды контроллеров, которые не могут быть обработаны так, как вы делаете.

Вы бы лучше подклассы ваш UIWindow в app delegate и переместить метод -(IBAction)tabtoview:(id)sender; в подкласс UIWindow. Я пробовал и работает.

Причина: У вас должен быть контроллер, ответственный за переключение просмотров. То, что вы пытаетесь сделать, - это замена контроллеров, а не просмотр. И это конфликт. Вкладки являются частью UITabController, они не являются просмотрами! Это также та же история для UINavigationController.

Так что, если вы просто обмен мнениями, вы можете сделать это прямо в одном из ваших viewControllers, но swpaping контроллер с другим (т.е. UIViewcontroller с UITabBarController) должны быть обработаны на более высоком уровне, то есть приложение делегата. Единственным экземпляром, доступным на этом уровне, является ваш UIWindow.

0

Почему не используется

UIView *v = [[UIView alloc] initWithFrame:[[UIApplication mainScreen] bounds]]; 
[self presentModalViewController:v animated:YES]; 

Я думаю, что он должен работать

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