gpt4 book ai didi

ios - 我可以让 UIPresentationController 在 PresentingViewController 上启用 userInteractionEnabled 吗?

转载 作者:技术小花猫 更新时间:2023-10-29 11:13:45 27 4
gpt4 key购买 nike

我正在为 iPhone 和 iPad 的通用应用程序构建自定义 GUI。在 iPad 上,它严重依赖“sideViews”来实现内容操作、detailInformation 等实用程序(想想高级 SplitView)。从视觉的角度来看,新的 UIPresentationController 非常适合让我展示这些“sideViews”(而不是使用 dimmedView),并且实现易于构建和维护,同时仍然与 Storyboard很好地集成。但是我需要能够在 presentedViewController 可见时操作 presentingViewController 的内容。所以我的问题是,我可以在呈现 sideView 时在 presentingViewController 上设置 userInteractionEnabled(或类似的)吗?

最佳答案

UIPresentationController 将其容器 View 作为窗口 subview 插入呈现 View 上方,因此任何在呈现 View 之外的触摸都会被容器 View 捕获,永远不会进入呈现 View

修复方法是在容器 View 上插入一个 View ,该 View 通过触摸传递到呈现 View 。您可以将其用作调光 View 或将其 backgroundColor 设置为 [UIColor clearColor] 以获得完全透明的 View 。在您的演示 Controller 代码中设置直通 View 。

@interface IVPasserView : UIView

@property (strong, nonatomic) NSArray* passthroughViews;

@end

@implementation IVPasserView

- (UIView*)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
UIView* hit = [super hitTest:point withEvent:event];
if (hit == self)
for (UIView* passthroughView in _passthroughViews)
{
hit = [passthroughView hitTest:[self convertPoint:point toView:passthroughView]
withEvent:event];
if (hit)
break;
}
return hit;
}

@end

注意:虽然这违反了 -[UIView hitTest:withEvent:] 的精神,因为它不返回 subview ,但这实际上是系统标准 UIPopoverPresentationController 处理它。如果您在那里设置 passthroughViews 属性,容器 View 将使用直通 View 响应 hitTest:withEvent:,即使它们不是 super View / subview !因此,它很可能会在下一个 iOS 版本中幸存下来。

关于ios - 我可以让 UIPresentationController 在 PresentingViewController 上启用 userInteractionEnabled 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28500507/

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