实际上有三种观点在发挥作用。我的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];
}
在我看来,这应该有效!但是,唉,我按了一排,然后突出显示,没有任何反应。
我一整天都在努力,所以很可能我只是错过了什么,但我不知道它是什么。任何帮助表示赞赏
答案 0 :(得分:1)
这里似乎涉及两个类:homeView类和StudyPickerController。我猜这个tableView:didSelectRowAtIndexPath:
方法会在homeView类中吗?
在这种情况下,self.navigationController
正在尝试访问homeView所在的导航控制器,不您放入弹出窗口的导航控制器。由于homeView甚至不在导航控制器中,因此访问器返回nil。
相反,您需要使用类似[self.studyPicker.navigationController pushViewController:picker animated:YES];
的内容。