- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在将一个旧应用程序更新为新的自适应大小做事方式,并且很难让带有导航 Controller 的弹出窗口正常工作。
我的目标:当应用程序是紧凑型和常规水平应用时,我希望能够通过按钮打开弹出窗口。弹出窗口有一个 TableView ,并使用导航 Controller 在用户触摸表上的一行时推送 View Controller 。我可以让弹出窗口正确打开,但我不知道该由谁来进行推送。
这是打开弹出窗口的代码:
OptionsController *vc = [[OptionsController alloc] initWithNibName:@"OptionsView" bundle:nil];
vc.modalPresentationStyle = UIModalPresentationPopover;
UIPopoverPresentationController *popover = [vc popoverPresentationController];
popover.delegate = self;
[self presentViewController:vc 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;
此代码正确地打开了紧凑型或常规尺寸的弹出窗口。
在 OptionsController 的 didSelectRowAtIndexPath 方法中,我有这个(controllersArray 是一个 UIViewController 数组,每个 Controller 对应表中的一行):
UIViewController *nextController = [self.controllersArray objectAtIndex: [indexPath row]];
[self.navigationController pushViewController:nextController animated:YES];
所有这些都执行了,但是没有推送发生,所以下一个 View 永远不会出现。
我显然不了解有关使用 UIViewController 的 navigationController 的内容,或者如何安装 navigationController 来完成这项工作。经过三四天的深入研究以尝试了解如何完成这项工作,我将不胜感激任何见解或有关如何执行此操作的文档链接。提前致谢。
最佳答案
Crud - 这有一个非常简单的答案。只是让我以不同的方式思考并挖掘了 Larcerax 的评论。以下是如何进行这项工作:
OptionsController *vc = [[OptionsController alloc] initWithStyle:UITableViewStylePlain];
vc.title = @"Options";
UINavigationController *nc = [[UINavigationController alloc] initWithRootViewController: vc];
nc.modalPresentationStyle = UIModalPresentationPopover;
UIPopoverPresentationController *popover = [nc popoverPresentationController];
popover.delegate = self;
[self presentViewController:nc 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;
区别在于我以通常的方式创建 UINavigationController...
UINavigationController *nc = [[UINavigationController alloc] initWithRootViewController: vc];
...将 navigationController 的呈现样式设置为 popover,然后从 navigationController 获取 popoverPresentationController - 在我对 UIViewController 执行这两种方法之前。
nc.modalPresentationStyle = UIModalPresentationPopover;
UIPopoverPresentationController *popover = [nc popoverPresentationController];
最后,我展示了导航 Controller :
nc.modalPresentationStyle = UIModalPresentationPopover;
UIPopoverPresentationController *popover = [nc popoverPresentationController];
这种方法提供了一个弹出窗口,具有紧凑且常规的水平尺寸,其中包含导航 Controller 功能:正是我想要的。
再次感谢 Larcerax,他的回答不是我需要的,但让我以不同的方式重新思考我在做什么。像往常一样,StackOverflow 出现了。
关于IOS AdaptiveView Popover 和 NavigationController : how do they work?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32005649/
我正在将一个旧应用程序更新为新的自适应大小做事方式,并且很难让带有导航 Controller 的弹出窗口正常工作。 我的目标:当应用程序是紧凑型和常规水平应用时,我希望能够通过按钮打开弹出窗口。弹出窗
我是一名优秀的程序员,十分优秀!