【发布时间】:2011-10-05 02:47:42
【问题描述】:
我目前正在开发自定义 UIControl 子类。要跟踪触摸,我使用以下方法:
- (BOOL)beginTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event {
NSLog(@"Start");
CGPoint location = [touch locationInView:self];
if ([self touchIsInside:location] == YES) {
//Touch Down
[self sendActionsForControlEvents:UIControlEventTouchDown];
return YES;
}
else {
return NO;
}
}
这按预期工作,@"Start" 只记录一次。下一步是使用 UIControlEventTouchDown 添加一个 Target 和一个 Selector。
[markItem addTarget:self action:@selector(action:) forControlEvents:UIControlEventTouchUpInside];
这也有效,并且调用了 action: 方法。但这是我的问题。该动作被调用两次。我究竟做错了什么?我只使用一次[self sendActionsForControlEvents:UIControlEventTouchDown];,目标操作被调用了两次。我的代码有什么问题?
桑德罗·迈耶
【问题讨论】:
-
两个调用中 TouchUpInside 事件的发送者是“self”吗?我不太确定 Cocoa Touch 中的视图层次结构,但您可能会同时收到“self”对象的 touch up 事件和 self 的子视图。
-
是的。两次发送者都是我的 UIControl 子类的同一个对象。
-
这个目标被调用两次的原因是系统自动发送
UIControlEventTouchDown消息,并且在你的控制下你正在发送第二个消息。除此之外,您正在做的事情是完全合理的。如果您只想要UIControlEventTouchXXXXX的自动触摸消息,则根本不需要beginTrackingWithTouch。但是,如果您通过触摸事件更改控件的外观,则需要这些功能。 -
感谢 Robotbugs,解决了它!
标签: objective-c ios subclass uicontrol