Я работаю над небольшим приложением, в соответствии с требованием приложение должно иметь tabBarItem с 3 элементами. Для этого я программно создал tabBarController в файле AppDelegate.m и добавил 3 разных viewControllers, создал их и все работает хорошо. Я вижу tabBarItems и все представления работают. В одном из представлений, скажем, в SecondViewController я показываю popOverController, где я использовал UITableView, и заполняю его элементами. Когда я щелкаю один из элементов, он должен показывать другой вид, скажем, sendFeedback. Пока все не работает нормально, но как только этот sendFeedback представлен как модальное представление, он занимает все приложение, то есть скрывает tabBarItem.
Я представляю важные фрагменты кода здесь для обзора:
AppDelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
// Override point for customization after application launch.
UIViewController *viewController1 = [[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil];
viewController1.title = @"First";
UIViewController *viewController2 = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];
viewController2.title = @"Second";
UITableViewController *tableView3 = [[tableViewController alloc]initWithNibName:@"tableViewController" bundle:nil];
tableView3.title = @"Third";
self.tabBarController = [[UITabBarController alloc] init];
self.tabBarController.viewControllers = [NSArray arrayWithObjects:viewController1, viewController2, tableView3 ,nil];
self.tabBarController.delegate = self;
self.window.rootViewController = self.tabBarController;
[self.window makeKeyAndVisible];
[viewController1 release];
[viewController2 release];
[tableView3 release];
return YES;
}
В моем файле popOverViewController.m я проверяю, какая строка выбрана в таблице в соответствии с тем, как я представляю представление
#pragma mark - TableView Delegate Methods
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
sendFeedback *sendEmailViewController = [[sendFeedback alloc]initWithNibName:@"sendFeedback" bundle:nil];
downLoad *downloadFilelViewController = [[downLoad alloc]initWithNibName:@"downLoad" bundle:nil];
if (indexPath.row == 0)
[self presentModalViewController:sendEmailViewController animated:YES];
else
[self presentModalViewController:downloadFilelViewController animated:YES];
}
Может кто-нибудь подсказать мне, как преодолеть это с помощью нескольких представлений. Если кому-то понадобится дополнительная информация с моей стороны, я с радостью предоставлю.
ПРИМЕЧАНИЕ: то же самое относится и к другому представлению (downLoad)
РЕДАКТИРОВАТЬ: Вот как я инициализирую мой PopOverController в файле AppDelegate.m
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
{
if([viewController isKindOfClass:[SecondViewController class]]){
NSInteger index = [[self tabBarController] selectedIndex];
CGRect buttonFrame = [[[[[self tabBarController] tabBar] subviews] objectAtIndex:index+1] frame];
PopOverViewController *popoverView = [PopOverViewController new];
popoverView.contentSizeForViewInPopover = CGSizeMake(250, 85);
popover = [[UIPopoverController alloc]initWithContentViewController:popoverView];
NSLog(@"X:%f Y:%f",buttonFrame.origin.x,buttonFrame.origin.y);
[popover presentPopoverFromRect:buttonFrame inView:self.tabBarController.tabBar permittedArrowDirections:UIPopoverArrowDirectionDown animated:YES];
}
Спасибо