问题标签 [uipresentationcontroller]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
21828 浏览

objective-c - UIPopoverPresentationController 应该在 iOS 9 上进行演示之前设置一个非零的 sourceView 或 barButtonItem

我正在尝试使用自定义 UIPopoverPresentationController 类显示一个弹出窗口。但它崩溃并出现错误(<UIPopoverPresentationController: 0x7a772950>) should have a non-nil sourceView or barButtonItem set before the presentation occurs.下面是我发生崩溃的按钮单击代码。

下面是我的自定义 UIPopoverPresentationController 的示例

我没有条形按钮,但我正在设置 sourceView。我在这里做错了吗?感谢你的帮助

0 投票
0 回答
205 浏览

ios - 在presentingViewController后面

我正在尝试使用 为模态视图演示进行自定义转换UIPresentationController,如下所示。

在此处输入图像描述

我将我的呈现视图缩放如下(内部func presentingTransitionWillBegin()):

但是,背景presentingView总是黑色的,我找不到合适的地方来改变颜色。

我尝试将白色视图添加到containerView,然后添加self.presentingViewController.view为其子视图:

好吧,它以某种方式起作用。但显然在我关闭模态视图后它会崩溃。self.presentingViewController.view当解雇过渡结束时,我找不到在哪里放回这个!

最终,我想实现以下目标:

在此处输入图像描述

0 投票
1 回答
619 浏览

ios - UIPresentationController 直到显示后才调用 containerViewWillLayoutSubviews

UIPresentationController在主视图上显示了一个侧边菜单,固定宽度为 300。然后用户可以从侧边菜单打开全屏模式视图。当模态视图被解除时,菜单视图在解除动画期间填充屏幕(这是错误的)。在动画结束时,containerViewWillLayoutSubviews菜单将其宽度更正为 300。

我确实执行frameOfPresentedViewInContainerView。我还在shouldPresentInFullscreen菜单视图上实现返回 NO(尽管这似乎不会影响我真正能确定的任何事情)。

containerViewWillLayoutSubviews为什么在 disssal 动画之前不调用?当菜单视图被覆盖和显示时,我应该如何保持它的宽度?

0 投票
0 回答
371 浏览

ios - 从自定义 UIPresentation 控制器更改呈现的导航视图控制器的框架不更改导航控制器子项的边界

我正在展示一个带有自定义转换和自定义演示控制器的导航控制器。演示控制器监听键盘,并相应地更改呈现的视图控制器框架。

在第一个屏幕键盘处于活动状态,因此呈现的视图控制器使用较小的框架 在第一个屏幕键盘处于活动状态,因此呈现的视图控制器使用较小的框架

我为导航控制器设置了红色背景。当第二个屏幕出现时,它会关闭键盘,并增加呈现的视图控制器的框架。尽管导航控制器框架根据需要更改,但它不会更改其子视图的框架

我为导航控制器设置了红色背景。 当第二个屏幕出现时,它会关闭键盘,并增加呈现的视图控制器的框架。 尽管导航控制器框架根据需要更改,但它不会更改其子视图的框架

知道如何解决这个问题

0 投票
3 回答
289 浏览

ios - 是否可以在非视图类中创建 IBOutlet?

我正在创建一个自定义呈现控制器,用于在呈现视图控制器时使背景变暗。演示控制器在过渡开始时添加了几个子视图,效果很好。

但是,我想在Interface Builder中设置 chrome(演示文稿“框架”),因为这样更容易布局。因此,我创建了一个用于设计 chrome 的 XIB 文件。它包括一个半透明的背景视图和左上角的 ❌ 按钮,用于关闭呈现的视图控制器。对于这些子视图,我需要在我的演示控制器不是UIViewController类)中使用插座和操作。

为了实现这一点,我在 Interface Builder 和实例化视图时的代码中将 XIB 文件的所有者设置为我的自定义演示控制器:

然后我通过CTRL+ 拖动到我的演示控制器创建了相应的出口和操作:

但是,在运行时应用程序崩溃,因为 UIKit 找不到出口键,并且在删除出口时,操作方法不会被触发。所以在这两种情况下都没有建立连接。

Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<_SwiftValue 0x600000458810> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key closeButton.'

我能想到为什么这不起作用的唯一原因是不允许使用不继承自UIViewor的类创建出口和操作UIViewController

这个假设正确吗?

有没有办法用非视图(-控制器)类创建出口和动作?

0 投票
1 回答
84 浏览

ios - UIPresentationController 中的 topLayoutGuide 等效项?

我有一个用于呈现视图控制器的自定义转换,我使用一个UIPresentationController子类来执行演示。

在演示控制器中,我向其containerView(镀铬)添加了几个子视图。我想用类似的东西来限制其中一个,topLayoutGuide以考虑任何顶部栏的高度(如状态栏)。

但是,UIPresentationController它不是UIViewController子类,因此它没有topLayoutGuide属性。我尝试使用presentingViewController's 和presentedViewController's约束视图,topLayoutGuide但应用程序崩溃,因为它们不是同一视图层次结构的一部分。

那么有没有办法将子视图放置在演示控制器的containerView顶部,同时仍然考虑任何顶部栏的高度?

0 投票
0 回答
396 浏览

ios - 您可以将 UIPresentationController 用于自定义演示/动画样式吗?

我总是尝试通过使用 API 中的所有进步和最佳实践来使我的代码保持最新,但这次它接缝我碰壁了。

我想将我的一些代码从使用 View Controller Containment 升级到 Presentation Controller。

我试图复制的演示/转换是呈现视图控制器的视图部分滑出侧面以显示呈现视图控制器的视图。

不幸的是,我正在努力找出演示文稿的正确设置。

逻辑选择应该UIModalPresentationOverCurrentContext用于modalPresentationStyle呈现的视图控制器。

https://developer.apple.com/documentation/uikit/uimodalpresentationstyle/uimodalpresentationovercurrentcontext

不幸的是,此设置导致

[transitionContext viewForKey:UITransitionContextFromViewKey];

在过渡动画器中返回 nil,这反过来意味着我无法将视图动画到屏幕外……</p>

真的在这方面苦苦挣扎......我想知道 UIPresentationController 的使用是否意味着在更受限制的场景中使用,而不是用于高度定制的演示文稿/动画。

0 投票
5 回答
8061 浏览

ios - iOS - 关闭呈现的视图控制器在其视图之外触摸

我有一个CustomPresentationController带有自定义动画的进出动画;

这个特定的控制器被呈现出来,在屏幕尺寸的 50% 处更少,当我呈现它时,我添加了一个阴影灰色视图,presentingViewController因此它增加了一些深度。

presentedViewController如果我点击我调用默认方法的cancel按钮,我只能关闭。NavBardismiss(:)

我想要完成的是检测 外面的水龙头presentedViewController,也许在灰色区域内,所以我可以关闭presentedViewController,有点像关闭 anActionSheet但我没能做到。让我解释一下我到目前为止所做的尝试。

我尝试将 a 添加UITapGestureRecognizer到阴影灰色视图,但由于我呈现的是不同的控制器,因此应用程序引擎可能会认为,由于阴影视图不在顶层层次结构视图中,它可能无法访问,因此它“阻塞”识别器 - 每当我点击它时,手势句柄都不会触发。

我现在正在实施另外一个向下滑动来关闭,我可以很容易地做到这一点,但我真的希望点击外部功能也能正常工作。

关于如何解决这个问题的任何提示?

应用程序图像如下:

截屏

0 投票
1 回答
1106 浏览

ios - 如何从呈现的控制器中访问我的自定义 UIPresentationController?

这就是我执行转换的方式:

然后在我呈现的控制器 ( AlertVC) 中,有时我需要访问它的呈现控制器:

为什么?

介绍:

0 投票
1 回答
1169 浏览

swift - Can a UIViewController that is presented as a popover be its own popoverPresentationController delegate?

In the project shown below there is an InitialViewController that has a single button labeled "Show Popover". When that button is tapped the app is supposed to present the second view controller (PopoverViewController) as a popover. The second view controller just has a label saying "Popover!".

storyboard image

This works fine if the InitialViewController takes care of instantiating PopoverViewController, retrieving the popoverPresentationController and then setting the popoverPresentationController's delegate to itself (to InitialViewController). You can see the result, below:

functiong app when delegation occurs in InitialViewController

For maximum reusability, however, it would be great if the InitialViewController did not need to know anything about how the presentation controller is delegated. I think it should be possible for the PopoverViewController to set itself as the popoverPresentationController's delegate. I've tried this in either the viewDidLoad or the viewWillAppear functions of the PopoverViewController. However, the PopoverViewController is presented modally in both cases, as shown below:

enter image description here

All the code is contained in just the InitialViewController and the PopoverViewController. The code used in the failing version of the InitialViewController is shown below:

The code in the failing PopoverViewController is shown below:

Is it possible for a view controller that is being presented as a popover to be the delegate for its own popoverPresentationController?

I'm using Xcode 8.0, Swift 3.1 and the target is iOS 10.0