gpt4 book ai didi

IOS AdaptiveView Popover 和 NavigationController : how do they work?

转载 作者:行者123 更新时间:2023-11-28 21:41:08 30 4
gpt4 key购买 nike

我正在将一个旧应用程序更新为新的自适应大小做事方式,并且很难让带有导航 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/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com