gpt4 book ai didi

objective-c - 有什么方法可以获取在 Objective C 中被点击的对象?

转载 作者:行者123 更新时间:2023-12-01 17:58:14 24 4
gpt4 key购买 nike

我已经阅读了 responder chain 上的苹果文档并且需要知道:我如何 NSLog 被点击的对象?
假设我有一个非常复杂的 View Controller ,其中包含多个 View 对象,当我点击一个对象(UIButton 或其他任何东西......)时,有没有办法知道被点击的特定对象?
文档给出了很好的概述,但没有明确覆盖的方法。
编辑 :
情况是在测试我没有编写的不同应用程序。我需要一种快速的方法来确定被点击的对象(因为许多应用程序都有自定义控件/对象,看起来像一件事,但实际上是另一件事)。我希望有一些方法可以在触摸事件被发送到 UIAppication 时拦截它,然后 NSLog 它。

最佳答案

您可以覆盖 -[UIApplication sendAction:to:from:forEvent]做你想做的事:

@implementation MyApplicationSubclass

- (BOOL)sendAction:(SEL)action to:(id)target from:(id)sender forEvent:(UIEvent *)event
{
NSLog(@"Sending action %@ from sender %@ to target %@ for event %@", NSStringFromSelector(action), sender, target, event);
return [super sendAction:action to:target from:sender forEvent:event];
}

@end

把它放在 UIApplication 的自定义子类中。然后,在 main.m 中,将调用更改为 UIApplicationMain()以便使用您的自定义子类:
int main(int argc, char *argv[])
{
@autoreleasepool {
return UIApplicationMain(argc, argv, NSStringFromClass([MyApplicationSubclass class]), NSStringFromClass([AppDelegate class]));
}
}

请注意,这仅适用于 UIControl 子类,它们使用此机制将其操作发送到其目标。如果您想查看通过应用程序的所有触摸事件,请覆盖 -[UIApplication sendEvent:]反而。在这种情况下,由您决定哪个对象将接收触摸。您可以调用 -hitTest:在您的主视图/窗口上,但请记住,这会确定触摸落在哪个 View 上,而不一定是哪个 View 处理它(例如, View 可以将事件转发给其他对象)。像这样的东西:
@implementation MyApplicationSubclass

- (void)sendEvent:(UIEvent *)event
{
UIWindow *window = [self keyWindow];
NSSet *touches = [event touchesForWindow:window];
for (UITouch *touch in touches) {
UIView *touchedView = [window hitTest:[touch locationInView:window] withEvent:event];
NSLog(@"Touch %@ received in view %@ for event %@", touch, touchedView, event);
}

[super sendEvent:event];
}

@end

关于objective-c - 有什么方法可以获取在 Objective C 中被点击的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13849707/

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