如何在UIPopOverController中嵌入navigationController?

时间:2011-04-28 01:19:43

标签: iphone ipad uitableview uinavigationcontroller uipopovercontroller

实际上有三种观点在发挥作用。我的homeView是我从中启动选择器的地方,它将StudyPickerController视图设置为root用户,然后将其设置为一个navController,然后将其显示在popOverController中。然后从StudyPickerController视图中,我需要完全推送到ScreenPickerController,一个不同的视图。

我有一个UIPopOverController,它显示一个tableView视图的内容。我希望能够在此视图中使用viewController推送一个新视图,但正如我将要讨论的那样,它非常接近,但它不会推动!

因此,从我的homeView,当按下按钮时,将调用一个动作并运行此代码:

self.studyPicker = [[[StudyPickerController alloc] initWithStudyArray:self.studyArray ViewNum:butto.tag] autorelease];

UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:self.studyPicker];   

_studyPicker.delegate = self;
self.studyPickerPopover = [[[UIPopoverController alloc] initWithContentViewController:navController] autorelease];               

[self.studyPickerPopover presentPopoverFromRect:CGRectMake(120,45, 10,10) inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];

这很好用! popOverController显示我的StudyPickerController的内容没有任何问题。我觉得我确实可以访问我的navigationController,因为popOverController的框架顶部有一个条形图,而不仅仅是一个细边框,它有一个navigationBar。

所以现在当我想在这个视图中选择一行时,我想通过我的navigationController推送到一个新视图,同时使用tableView。这是代码:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    NSArray * array = [_studyArray objectAtIndex:indexPath.row];

    ScreenPickerController * picker = [[ScreenPickerController alloc] init];
    picker.seriesGUID = array;
    picker.viewNumber = viewNumber;

    [self.navigationController pushViewController:picker animated:YES];
}

在我看来,这应该有效!但是,唉,我按了一排,然后突出显示,没有任何反应。

我一整天都在努力,所以很可能我只是错过了什么,但我不知道它是什么。任何帮助表示赞赏

1 个答案:

答案 0 :(得分:1)

这里似乎涉及两个类:homeView类和StudyPickerController。我猜这个tableView:didSelectRowAtIndexPath:方法会在homeView类中吗?

在这种情况下,self.navigationController正在尝试访问homeView所在的导航控制器,您放入弹出窗口的导航控制器。由于homeView甚至不在导航控制器中,因此访问器返回nil。

相反,您需要使用类似[self.studyPicker.navigationController pushViewController:picker animated:YES];的内容。