NewView显示在PopOver而不是newView

时间:2012-02-08 10:44:19

标签: objective-c ipad ios5

我从PopOver中选择了正确的视图,但没有在父视图中显示,而是在PopOverView中显示。

以下是一些截图: PopOver

在我选择反馈选项后,在我的父视图中显示视图,在我的情况下是SecondViewController(灰色背景屏幕),它显示在PopOver本身。

Selected View from PopOver

有关信息,我有三个VC,即每个分配给每个TabBar项目的FirstViewController,SecondViewController和ThirdViewController。我想让SecondViewController成为PopOver的父级。

这是我在AppDelegate.m

中创建PopOver的代码
- (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 *popoverContentController = [[PopOverViewController alloc]init];            

        UINavigationController *navcon = [[UINavigationController alloc]initWithRootViewController:popoverContentController];

        popoverContentController.contentSizeForViewInPopover = CGSizeMake(250, 85);
        popover = [[UIPopoverController alloc]initWithContentViewController:navcon];


        NSLog(@"X:%f Y:%f",buttonFrame.origin.x,buttonFrame.origin.y);

        [popover presentPopoverFromRect:buttonFrame inView:self.tabBarController.tabBar permittedArrowDirections:UIPopoverArrowDirectionDown animated:YES];

    }
}

我的PopOverController.m中的代码,我可以选择要显示的新视图

- (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.navigationController pushViewController:sendEmailViewController animated:YES];
   else
       [self.navigationController pushViewController:downloadFilelViewController animated:YES];
}   

任何人都可以让我知道如何引用我的父视图(SecondViewcontroller),以便新视图显示在我的父视图而不是弹出视图中。

由于

1 个答案:

答案 0 :(得分:0)

你插入到popover UINavigationController并在didSelectRowAtIndexPath中将新创建的控制器推送到已存在的堆栈(进入popover UINavigationController),但不进入标签栏。

为了将新创建的控制器推送到第二个选项卡,您需要将第二个选项卡(现在是SecondViewController)分配给新的UINavigationController并使用此导航堆栈。

代码将如下所示:

UINavigationController *navController = (UINavigationController*)[tabBarController.viewControllers objectAtIndex:1];
[navController pushViewController:downloadFilelViewController animated:YES];