这是你应该尝试的。对于我正在使用的应用程序,我每个应用程序使用大约 10-40 个导航控制器,我也遇到过同样的问题,我没有使用弹出框,但我已经将导航控制器和视图控制器的垃圾分类为有遇到你同样的问题。问题是,如果你这样做:
UIViewController * ff = [UIViewController new]
[self presnetViewController:ff ... blah blah blah
模态视图控制器显然没有附加导航系统,因此您无法导航到其他任何内容,您只能关闭模态并继续前进。所以,这就是我解决这个问题的方法,它每次都有效,它每次都适用于 UIViewControllers,试一试
看下面,不是popovers,但原理是一样的:
NSHTermsOfServiceViewController * pvc = [NSHTermsOfServiceViewController new];
UIBarButtonItem * backBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"exit-button"] style:UIBarButtonItemStylePlain target:self action:@selector(backerPressed)];
NSHNavigationController * ssf = [[NSHNavigationController alloc] initWithRootViewController:pvc];
[[pvc navigationItem] setLeftBarButtonItem:backBarButtonItem];
[[self navigationController] presentViewController:ssf animated:true completion:nil];
NSHTermsOfServiceViewController <== 是 UIViewcontroller 的另一个子类的子类,它基本上是类固醇上的 UIViewController,仅此而已
NSHNavigationController 是一个 UINavigationController 的子类,并在动画的类固醇上抽水
流程是这样的:
- 创建一个视图控制器
- 创建一个新的 UINavigationController
- 将您在步骤 1 中创建的视图控制器设置为在步骤 2 中创建的导航控制器的根视图控制器
- 呈现 NAVIGATION CONTROLLER,而不是 UIViewController,您可以像这样从视图控制器呈现这个 navigationController ..
v
[self presentViewController:ssf animated:true completion:nil];
或者您可以从我更喜欢的当前视图控制器的导航控制器中呈现它,如下所示:
[[self navigationController] presentViewController:ssf animated:true completion:nil];
您的代码已修改,唯一的问题是我不知道您是否可以通过将 UIPopOverViewController 植根于导航控制器中来呈现它
OptionsController *vc = [[OptionsController alloc] initWithNibName:@"OptionsView" bundle:nil];
UIPopoverPresentationController *popover = [vc popoverPresentationController];
UINavigationController * stuff = [[NSHNavigationController alloc] initWithRootViewController:popover];
stuff.modalPresentationStyle = UIModalPresentationPopover;
stuff.delegate = self;
[self.navigationController presentViewController:stuff animated: YES completion: nil];
popover.permittedArrowDirections = UIPopoverArrowDirectionUp; // change as necessary
popover.sourceView = self.view;
CGRect popoverRect = [self.view convertRect:[sender frame] fromView:[sender superview]];
popover.sourceRect = popoverRect;
是的,我的错,不适用于popover,我只是尝试过
那么,话虽如此,绝对有必要使用弹出框吗?你为什么要使用它,而现在只是一个 UIViewcontroller,你重新配置它看起来像一个弹出框,然后你就拥有了你需要的东西?
这是这个,我刚刚用 Ipad 模拟器试了一下,它允许推送,就像它应该有的那样。
NSHLoginViewController * pvc = [NSHLoginViewController new];
UINavigationController *navController = [[UINavigationController alloc]initWithRootViewController:pvc];
UIPopoverController *popover = [[UIPopoverController alloc] initWithContentViewController:navController];
UIView * stuff = [[UIView alloc] initWithFrame:CGRectMake(50, 50, 1000, 1000)];
[self.view addSubview:stuff];
[popover presentPopoverFromRect:[[self contentView] nameField].frame inView:stuff permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES];
this: [[self contentView] nameField].frame 只是一个 uitextfield,没什么特别的,仅此而已,上面的方法显示了登录视图控制器,当我输入凭据时,我按下了登录,它推送了下一个视图控制器通常情况下,您的 uitableview 或其他任何东西截获的触摸可能有问题,也许不是,但这种方法确实对我有用。