我之前发过类似的问题,但这次我提供了一些分析代码。我正在我的AppDelegate.m文件中创建PopOverController,我正在添加一个NavigationController变量,我想传递给PopOverController.m文件,以便使用我想要推送其他视图。以下是我在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:popoverContentController];
NSLog(@"X:%f Y:%f",buttonFrame.origin.x,buttonFrame.origin.y);
[popover presentPopoverFromRect:buttonFrame inView:self.tabBarController.tabBar permittedArrowDirections:UIPopoverArrowDirectionDown animated:YES];
}
}
在我的PopOverController.m中,我试图使用NavigationController来选择这样的视图:
- (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];
}
但是当我点击PopOver的TabBar项目时,我收到此SIGABRT消息:
由于未捕获的异常'NSGenericException'而终止应用程序,原因是:'内容视图控制器参数必须是其关联的视图控制器层次结构的根。'
出现这种情况的原因是什么?我的代码中是否存在错误?
答案 0 :(得分:1)
UINavigationController *navcon = [[UINavigationController alloc] initWithRootViewController:popoverContentController];
您正试图将弹出式控制器放在导航控制器中。我认为你不想要这个。
要将导航设置为popover,您应该这样做,
UINavigationController *navcon = [[UINavigationController alloc] initWithRootViewController:myViewController];
popoverContentController = [UIPopoverController initWithContentViewController:navcon]
并使用您想要的viewController初始化导航控制器,如TableViewController或其他。