问题标签 [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.
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。我在这里做错了吗?感谢你的帮助
ios - 在presentingViewController后面
我正在尝试使用 为模态视图演示进行自定义转换UIPresentationController
,如下所示。
我将我的呈现视图缩放如下(内部func presentingTransitionWillBegin()
):
但是,背景presentingView
总是黑色的,我找不到合适的地方来改变颜色。
我尝试将白色视图添加到containerView
,然后添加self.presentingViewController.view
为其子视图:
好吧,它以某种方式起作用。但显然在我关闭模态视图后它会崩溃。self.presentingViewController.view
当解雇过渡结束时,我找不到在哪里放回这个!
最终,我想实现以下目标:
ios - UIPresentationController 直到显示后才调用 containerViewWillLayoutSubviews
我UIPresentationController
在主视图上显示了一个侧边菜单,固定宽度为 300。然后用户可以从侧边菜单打开全屏模式视图。当模态视图被解除时,菜单视图在解除动画期间填充屏幕(这是错误的)。在动画结束时,containerViewWillLayoutSubviews
菜单将其宽度更正为 300。
我确实执行frameOfPresentedViewInContainerView
。我还在shouldPresentInFullscreen
菜单视图上实现返回 NO(尽管这似乎不会影响我真正能确定的任何事情)。
containerViewWillLayoutSubviews
为什么在 disssal 动画之前不调用?当菜单视图被覆盖和显示时,我应该如何保持它的宽度?
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.'
我能想到为什么这不起作用的唯一原因是不允许使用不继承自UIView
or的类创建出口和操作UIViewController
。
这个假设正确吗?
有没有办法用非视图(-控制器)类创建出口和动作?
ios - UIPresentationController 中的 topLayoutGuide 等效项?
我有一个用于呈现视图控制器的自定义转换,我使用一个UIPresentationController
子类来执行演示。
在演示控制器中,我向其containerView
(镀铬)添加了几个子视图。我想用类似的东西来限制其中一个,topLayoutGuide
以考虑任何顶部栏的高度(如状态栏)。
但是,UIPresentationController
它不是UIViewController
子类,因此它没有topLayoutGuide
属性。我尝试使用presentingViewController
's 和presentedViewController
's约束视图,topLayoutGuide
但应用程序崩溃,因为它们不是同一视图层次结构的一部分。
那么有没有办法将子视图放置在演示控制器的containerView
顶部,同时仍然考虑任何顶部栏的高度?
ios - 您可以将 UIPresentationController 用于自定义演示/动画样式吗?
我总是尝试通过使用 API 中的所有进步和最佳实践来使我的代码保持最新,但这次它接缝我碰壁了。
我想将我的一些代码从使用 View Controller Containment 升级到 Presentation Controller。
我试图复制的演示/转换是呈现视图控制器的视图部分滑出侧面以显示呈现视图控制器的视图。
不幸的是,我正在努力找出演示文稿的正确设置。
逻辑选择应该UIModalPresentationOverCurrentContext
用于modalPresentationStyle
呈现的视图控制器。
不幸的是,此设置导致
[transitionContext viewForKey:UITransitionContextFromViewKey];
在过渡动画器中返回 nil,这反过来意味着我无法将视图动画到屏幕外……</p>
真的在这方面苦苦挣扎......我想知道 UIPresentationController 的使用是否意味着在更受限制的场景中使用,而不是用于高度定制的演示文稿/动画。
ios - iOS - 关闭呈现的视图控制器在其视图之外触摸
我有一个CustomPresentationController
带有自定义动画的进出动画;
这个特定的控制器被呈现出来,在屏幕尺寸的 50% 处更少,当我呈现它时,我添加了一个阴影灰色视图,presentingViewController
因此它增加了一些深度。
presentedViewController
如果我点击我调用默认方法的cancel
按钮,我只能关闭。NavBar
dismiss(:)
我想要完成的是检测 外面的水龙头presentedViewController
,也许在灰色区域内,所以我可以关闭presentedViewController
,有点像关闭 anActionSheet
但我没能做到。让我解释一下我到目前为止所做的尝试。
我尝试将 a 添加UITapGestureRecognizer
到阴影灰色视图,但由于我呈现的是不同的控制器,因此应用程序引擎可能会认为,由于阴影视图不在顶层层次结构视图中,它可能无法访问,因此它“阻塞”识别器 - 每当我点击它时,手势句柄都不会触发。
我现在正在实施另外一个向下滑动来关闭,我可以很容易地做到这一点,但我真的希望点击外部功能也能正常工作。
关于如何解决这个问题的任何提示?
应用程序图像如下:
ios - 如何从呈现的控制器中访问我的自定义 UIPresentationController?
这就是我执行转换的方式:
然后在我呈现的控制器 ( AlertVC
) 中,有时我需要访问它的呈现控制器:
为什么?
介绍:
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!".
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:
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:
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