gpt4 book ai didi

iphone - 将触摸事件发送到堆叠在后面的 UIviewController

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:05:43 24 4
gpt4 key购买 nike

在我的应用程序中,我有 2 个透明的 UIViewController 层。第一层包含我试图通过触摸识别的 UIView 对象:

 - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event;

方法。

问题是,在它上面有一个透明的UIViewController

我尝试在 SeconedStackedViewController 上实现触摸事件并创建 FirstStackedViewController 的实例并从那里调用相同的方法。方法被调用,但 HitTest 没有。

代码:

FirstStackedViewController *fsvc = [[FirstStackedViewController alloc]init];


- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
[fsvc hitTest:point withEvent:event];
}

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
fsvc = [[FirstStackedViewController alloc]init];
[fsvc touchesEnded:touches withEvent:event];
}

如何重写此方法以在 FirstStackedViewController 上调用?如果我可以在 FirstStackedViewController 上模拟触摸,我认为它会成功

最佳答案

我的第一个问题是为什么要推出透明 View Controller 。在同一 Controller 中分层透明 View 是否可以更好地满足您的需求?

如果不查看您的要求,很难确定,但这很可能更符合通常的逻辑分离:您需要可以从一个 View 接收输入并将其传递给其他逻辑的代码.它需要了解两者的内部结构,因此是具有完成任务所需知识的 Controller 对象的理想选择。

在这种情况下,您不会有任何问题 - 只需呈现您的透明 View ,然后将触摸传递给您想要的任何操作。

但是做一个透明 View 的 VC 是有充分理由的。要访问您下面的 VC,您可以像另一个响应者所说的那样访问应用程序委托(delegate)。我会将应用委托(delegate)排除在外,只访问 self.navController.viewControllers。该数组表示 VC 堆栈。然后向下迭代 - 您“下方”的人就是您要将消息转发给的人。

您很可能不想使用 isMemberOfClass 来定义协议(protocol)并检查 VC 是否符合协议(protocol)。

for (int i=0; i < navBar.viewControllers.count ; i++) {
UIViewController *current = navBar.viewControllers[i];
if (current == self) {
UIViewController *targetVC = navBar.viewControllers[i+1]; // make sure you're not over bounds - you could do this in the loop def'n.
if ([targetVC class] conformsToProtocol("TransparentPassingActions")]) {
// pass message
}
}
}

我想您也可以只使用 indexOfObject 来获取当前的 VC,然后再往下看。这摆脱了循环。

顺便说一下,前面答案中的伪代码混淆了 UIViews 和 UIViewControllers;也许这对你来说很清楚。无法通过访问 View 来访问 View Controller 。

关于iphone - 将触摸事件发送到堆叠在后面的 UIviewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14181205/

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