gpt4 book ai didi

iphone - 将事件传递给响应者链中的下一个响应者有什么技巧?

转载 作者:行者123 更新时间:2023-12-03 18:21:27 25 4
gpt4 key购买 nike

苹果真的很有趣。我的意思是,他们说这有效:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch* touch = [touches anyObject];
NSUInteger numTaps = [touch tapCount];
if (numTaps < 2) {
[self.nextResponder touchesBegan:touches withEvent:event];
} else {
[self handleDoubleTap:touch];
}
}

我有一个 View Controller 。如您所知, View Controller 继承自 UIResponder。该 View Controller 创建一个继承自 UIView 的 MyView 对象,并将其作为 subview 添加到它自己的 View 中。

所以我们有:

View Controller >有一个 View (自动)>有一个MyView(这是一个UIView)。

现在,在 MyView 内部,我将上面的代码与打印“touched MyView”的 NSLog 放在一起。但我将事件转发给下一个响应者,就像上面一样。在 ViewController 内部,我有另一个 TouchBegan 方法,它只打印 NSLog ,即“触摸 View Controller ”。

现在猜猜看:当我触摸 MyView 时,它会打印“touched MyView”。当我触摸 MyView 之外(即 VC 的 View )时,我会得到一个“触摸的 View Controller ”。所以两者都有效!但转发事件是行不通的。因为现在,实际上下一个响应者应该是 View Controller ,因为中间没有其他东西。但是当我转发它时,VC的事件处理方法从未被调用。

%$&!§!!

想法?

发现了一些奇怪的东西MyView 的下一个响应者是 View Controller 的 View 。这是有道理的,因为 MyView 是它的 subview 。但我没有从 View Controller 修改这个 UIView 。这不是什么风俗习惯。并且它没有实现任何触摸事件处理。消息不应该传递到 View Controller 吗?我怎么能让它过去呢?如果我删除 MyView 中的事件处理代码,那么事件会很好地到达 View Controller 中。

最佳答案

根据 similar question ,您的方法应该有效。

这让我认为您的 View 的 nextResponder 不是实际上是您怀疑的 ViewController

我会在您的转发代码中添加一个快速 NSLog 来检查您的 nextResponder 真正指向的内容:

if (numTaps < 2) {
NSLog(@"nextResponder = %@", self.nextResponder);
[self.nextResponder touchesBegan:touches withEvent:event];
}

您还可以更改其他 NSLog 消息,以便它们输出类型和地址信息:

NSLog(@"touched %@", self);

touched <UIView 0x12345678>

这应该可以帮助您开始诊断问题。

关于iphone - 将事件传递给响应者链中的下一个响应者有什么技巧?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1207287/

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